Python通过另一个字典值过滤字典列表

时间:2020-04-05 02:48:32

标签: python python-3.x dictionary arraylist

我有下面的词典和字典列表, 如果有匹配项,我想返回人名

mydblist = [{'name': 'Alice', 'AGATC': '2', 'AATG': '8', 'TATC': '3'},{'name': 'Bob', 'AGATC': '4', 'AATG': '1', 'TATC': '5'},{'name': 'Charlie', 'AGATC': '3', 'AATG': '2', 'TATC': '5'}]

dna_dict = {'AGATC': 4, 'AATG': 1, 'TATC': 5}

现在,我需要从字典mydict_list的列表中打印名称“ Bob”,因为他与dna_dict完全匹配,

或在找不到匹配项的情况下不打印匹配项

非常感谢您的提前支持

2 个答案:

答案 0 :(得分:0)

使用提供的清单,我在下面编写了解决方案。它只是比较dict键。一个字典具有str类型,而另一个具有int类型,这就是代码将其转换为类型的原因。

def compare_dicts(a, b):
    """
    Compare all keys of A with the same key in B
    """

    for key in a.keys():
        if key in b:

            if a[key] != int(b[key]):
                return False

    return True

for dict_obj in mydblist:
    if compare_dicts(dna_dict, dict_obj):
        print(dict_obj['name'])

答案 1 :(得分:0)

尝试

 mydblist = [{'name': 'Alice', 'AGATC': '2', 'AATG': '8', 'TATC': '3'},{'name': 'Bob', 'AGATC': '4', 'AATG': '1', 'TATC': '5'},{'name': 'Charlie', 'AGATC': '3', 'AATG': '2', 'TATC': '5'}]

 # Here i changed dna_dict value integer to string
 dna_dict = {'AGATC': '4', 'AATG': '1', 'TATC': '5'}

    for i in mydblist:
        if i["AGATC"] == dna_dict["AGATC"] and i["AATG"] == dna_dict["AATG"] and i["TATC"] == dna_dict["TATC"]:
            print(i["name"])