根据Python中的字典值隔离输入数据

问题描述

如果dict中存在/不存在输入数据,则需要对其进行隔离:

输入文件

1,aaaaaaaa3nawwqfzplgms3u4n7kobqq344sqkn3e75zpsek7kxgaskwsba
2,aaaaaaaa3nawwqfzplgms3u4n7kobqq344sqkn3e75zpsek7kxgaskwsba
3,aaaaaaaangdg77mg3cxnialazk7whbtdidftz3rv2bhqrxcvymaecagxdq
4,aaaaaaaa3nawwqfzplgms3u4n7kobqq344sqkn3e75zpsek7kxgaskwsba
5,aaaaaaaa3nawwqfzplgms3u4n7kobqq344sqkn3e75zpsek7kxgaskwsba
6,aaaaaatbmbxncexycbtsyrnhexniqr7g4vypfuksh5ezmzymuw7k2bw4sa
7,aaaaaatbmbxncexycbtsyrnhexniqr7g4vypfuksh5ezmzymuw7k2bw4sa 

基于mapping_hash将脚本与上述文件分离的脚本

# Check if the col[2] in the file is part of this dictionary
mapping_hash = {"ad1": "aaaaaaaangdg77mg3cxnialazk7whbtdidftz3rv2bhqrxcvymaecagxdq","ad2":"aaaaaaaa3nawwqfzplgms3u4n7kobqq344sqkn3e75zpsek7kxgaskwsba"}

absnt_dict= {}
Present_dict = {}

# Read the file
with open('so_input') as f:
    for row in f:
        row=row.strip().split(',')
        row_number = row[0]
        hash =row[1]
        print("--------------")
        
        for key,value in mapping_hash.items():
            #check if file value is part of mapping_hash dictionary
            if hash == value:
                print "Yes"
                Present_dict[row_number] = mapping_hash.keys()
            else:
                print "Na"
                absnt_dict[row_number] = hash

print Present_dict
print absnt_dict

输出

--------------
Yes
Na
--------------
Yes
Na
--------------
Na
Yes
--------------
Yes
Na
--------------
Yes
Na
--------------
Na
Na
--------------
Na
Na

Row part of Hash:
    {'1': ['ad2','ad1'],'3': ['ad2','2': ['ad2','5': ['ad2','4': ['ad2','ad1']}
Row not part of Hash:    
{'1': 'aaaaaaaa3nawwqfzplgms3u4n7kobqq344sqkn3e75zpsek7kxgaskwsba','3': 'aaaaaaaangdg77mg3cxnialazk7whbtdidftz3rv2bhqrxcvymaecagxdq','2': 'aaaaaaaa3nawwqfzplgms3u4n7kobqq344sqkn3e75zpsek7kxgaskwsba','5': 'aaaaaaaa3nawwqfzplgms3u4n7kobqq344sqkn3e75zpsek7kxgaskwsba','4': 'aaaaaaaa3nawwqfzplgms3u4n7kobqq344sqkn3e75zpsek7kxgaskwsba','7': 'aaaaaatbmbxncexycbtsyrnhexniqr7g4vypfuksh5ezmzymuw7k2bw4sa','6': 'aaaaaatbmbxncexycbtsyrnhexniqr7g4vypfuksh5ezmzymuw7k2bw4sa'}

这里,根据字典中元素的数量,循环将迭代并创建重复的条目!

  1. 我希望6和7应该是 absnt_dict 的一部分,其余部分应该是 Present_dict
  2. 输出1应该是ad2,而不像列出两个值'1': ['ad2','ad1']

解决方法

这是因为即使遇到“当前”也要继续检查

Present_dict[row_number] = "Present"

因此,所有哈希都插入了absnt_dict中。

您应该改用会员资格检查

# Read the file
with open('so_input') as f:
    for row in f:
        row=row.strip().split(',')
        row_number = row[0]
        hash =row[1]
        print("--------------")

        if hash in mapping_hash.values():
                print "Yes"
                Present_dict[row_number] = "Present"
        else:
                print "Na"
                absnt_dict[row_number] = hash

结果:

{'1': 'Present','3': 'Present','2': 'Present','5': 'Present','4': 'Present'}
{'7': 'aaaaaatbmbxncexycbtsyrnhexniqr7g4vypfuksh5ezmzymuw7k2bw4sa','6': 'aaaaaatbmbxncexycbtsyrnhexniqr7g4vypfuksh5ezmzymuw7k2bw4sa'}