Python将2个词典加入到第3个2D词典中,词典2中的键是词典1中的列表值

时间:2018-04-05 21:31:26

标签: python dictionary

我无法在任何地方找到这个特定的python字典问题。

我有两本词典:

dict1 = {'key1':['val1','val2','val3']}
dict2 = {'val1':['a','b','c']}

我想要第三个2D字典:

dict3 = {'key1': {'val1':['a','b','c']} }

因此,加入2个词典,其中第二个词典的键是第一个词典的列表值。

我尝试了一些嵌套循环:

for key1, val1 in dict1.items():
    for key2, in val2 in dict2.items():
        # do something here

我不确定这是否是最好的方法。

4 个答案:

答案 0 :(得分:0)

您可以使用字典理解,然后检查最终结果是否只包含一个字典。如果后者是真的,那么字典词典将是最终结果;否则,将为密钥存储字典列表:

dict1 = {'key1':['val1','val2','val3']}
dict2 = {'val1':['a','b','c']}
new_dict = {a:[{i:dict2[i]} for i in b if i in dict2] for a, b in dict1.items()}
last_result = {a:b if len(b) > 1 else b[0] for a, b in new_dict.items()}

输出:

{'key1': {'val1': ['a', 'b', 'c']}}

答案 1 :(得分:0)

最好通过迭代dict1并在dict2中查找匹配值来完成:

result = {}
for key, value_list in dict1.items():
    result[key] = subdict = {}

    for value in value_list:
        try:
            subdict[value] = dict2[value]
        except KeyError:
            pass

结果:

{'key1': {'val1': ['a', 'b', 'c']}}

答案 2 :(得分:0)

dict1 = {
    'key1':['val1','val2','val3']
}
dict2 = {
    'val1':['a','b','c']
}
dict3 = {
    key : { val_key : dict2[val_key] 
        for val_key in val_list if (val_key in dict2.keys())
    } for key, val_list in dict1.items() 
}

答案 3 :(得分:0)

您可以尝试此解决方案。

dict1 = {'key1':['val1','val2','val3']}
dict2 = {'val1':['a','b','c']}

join_dict={}

for i,j in dict1.items():
    for sub_l,sub_value in dict2.items():
        if sub_l in j:
            join_dict[i]={sub_l:sub_value}

print(join_dict)

输出:

{'key1': {'val1': ['a', 'b', 'c']}}