首页 > 解决方案 > 匹配嵌套字典中的项目并返回外键

问题描述

您好我正在尝试编写一些代码来比较几个嵌套字典以匹配特定项目,如果为 true,则返回外部键。

我尝试使用嵌套的 for 循环和字典名称列表来排序和查找匹配项,代码首先获取单个字典 dict1 和 dict2,然后比较每个字典中的 ['ID'] 键以进行匹配,请参见下文:

Dictionary1 = {'key1':{'ID':'ID1'}, 'key2':{'ID':'ID2'}, 'key3':{'ID':'ID3'}}

Dictionary2 = {'key4':{'ID':'ID1'}, 'key5':{'ID':'ID2'}, 'key6':{'ID':'ID3'}}



DictionaryList = [Dictionary1, Dictionary2]


for Dict1 in DictionaryList:
    for Dict2 in DictionaryList:
        for Key1 in Dict1:
            for Key2 in Dict2:
                if Dict1[Key1]['ID'] == Dict2[Key2]['ID']:
                    print('Dictionary1' + ': ' + Key1 + ' // ' 'Dictionary2' + ': ' + Key2)

此代码返回 12 个匹配项及其外键,其中大部分是错误的,见下文:

Dictionary1: key1 // Dictionary2: key1
Dictionary1: key2 // Dictionary2: key2
Dictionary1: key3 // Dictionary2: key3
Dictionary1: key1 // Dictionary2: key4
Dictionary1: key2 // Dictionary2: key5
Dictionary1: key3 // Dictionary2: key6
Dictionary1: key4 // Dictionary2: key1
Dictionary1: key5 // Dictionary2: key2
Dictionary1: key6 // Dictionary2: key3
Dictionary1: key4 // Dictionary2: key4
Dictionary1: key5 // Dictionary2: key5
Dictionary1: key6 // Dictionary2: key6

我怀疑这是因为字典被相互匹配了几次,即代码将 Dictionary1 与 Dictionary1 进行比较,然后将 Dictionary2 与 Dictionary2 进行比较,依此类推。

预期的结果将是打印 3 个匹配项的代码:

Dictionary1: key1 // Dictionary2: key4
Dictionary1: key2 // Dictionary2: key5
Dictionary1: key3 // Dictionary2: key6

我是 python/编程的新手,所以任何帮助都将不胜感激。

标签: python-3.xdictionarynestedmatch

解决方案


我不确定您为什么将字典组合成一个列表,然后尝试对其进行迭代。您可以简单地使用字典本身:

for Key1 in Dictionary1:
    for Key2 in Dictionary2:
        if Dictionary1[Key1]['ID'] == Dictionary2[Key2]['ID']:
            print('Dictionary1' + ': ' + Key1 + ' // ' 'Dictionary2' + ': ' + Key2)

这将打印

Dictionary1: key1 // Dictionary2: key4
Dictionary1: key2 // Dictionary2: key5
Dictionary1: key3 // Dictionary2: key6

推荐阅读