【问题标题】:Segregate the input data based on dictionary values in Python根据 Python 中的字典值分离输入数据
【发布时间】:2021-01-26 17:18:46
【问题描述】:

需要分离输入数据,如果它在字典中存在/不存在:

输入文件:

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', 'ad1'], '2': ['ad2', 'ad1'], '5': ['ad2', 'ad1'], '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']

【问题讨论】:

    标签: python python-3.x python-2.7 dictionary data-structures


    【解决方案1】:

    这是因为即使遇到'Present',你也会继续检查

    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'}
    

    【讨论】:

    • [更新问题]解决了隔离部分。但是,在我们需要将 dict 键分配给最终输出的第二部分中失败了。
    • 您需要建立一个mapping_hash的反向查找字典,然后使用哈希值从中检索键并将键添加到Present_dict字典中。
    猜你喜欢
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2021-02-28
    • 2022-07-29
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多