我有两个字典,只有相同的密钥。 第一本字典是:
{ "key_1" : "AR" ,
"key_2":"BR" ,
"key_3" : "CR" }
第二个是:
{ "key_1" : "signinfication of AR" ,
"key_2":" signinfication of BR" ,
"key_3" : " signinfication of CR" }
我想获得以下字典:
{"key_1" : {"AR" : "signinfication of AR"} ,
"key_2" : {"BR" : "signinfication of BR"} ,
"key_3" : {"CR" : "signinfication of CR"}
感谢您的帮助!
答案 0 :(得分:9)
这就像一行 dict comprehension 一样简单。
>>> {k : {d1[k] : d2[k]} for k in d1.keys() & d2.keys()}
{
"key_2": {
"BR": " signinfication of BR"
},
"key_1": {
"AR": "signinfication of AR"
},
"key_3": {
"CR": " signinfication of CR"
}
}
此处,d1
和d2
是您的两个词典。 d1.keys() & d2.keys()
将在字典键上执行交集,以确保对两个字典中存在的键执行迭代。这是
d1.keys() & d2.keys()
{'key_1', 'key_2', 'key_3'}
当你不能保证两个字典都具有完全相同的密钥时,这在一般意义上是很好的。
在python2.7及更早版本上,您需要稍作修改,因为keys()
会返回一个列表。使用set.intersection
-
>>> {k : {d1[k] : d2[k]} for k in set(d1.keys()).intersection(d2.keys())}
如果你正在使用列表的dicts,那么上面的代码需要在相应的列表之间进行zip
ping -
>>> d1
{
"key_1": [
"AR",
"BR",
"CR"
],
...
}
>>> d2
{
"key_1": [
"signfication of AR",
"signfication of BR",
"signfication of CR"
],
...
}
>>> {k : dict(zip(d1[k], d2[k])) for k in d1.keys() & d2.keys()}
{
"key_1": {
"BR": "signfication of BR",
"CR": "signfication of CR",
"AR": "signfication of AR"
},
"key_3": {
"CE": " signfication of CE",
"AE": "signfication of AE",
"BE": " signfication of BE"
},
"key_2": {
"BZ": "signfication of BZ",
"CZ": "signfication of CZ",
"AZ": "signfication of AZ"
}
}
答案 1 :(得分:2)
您还可以zip()
将词典items()
放在一起,并将它们合并在一起:
d1 = {"key_1" : "AR",
"key_2":"BR",
"key_3" : "CR"}
d2 = {"key_1" : "signinfication of AR",
"key_2":" signinfication of BR",
"key_3" : " signinfication of CR"}
# make sure both lists have same ordered keys
l1 = sorted(d1.items())
l2 = sorted(d2.items())
d = {k1 : {v1:v2} for (k1, v1), (_, v2) in zip(l1, l2)}
print(d)
哪个输出:
{'key_1': {'AR': 'signinfication of AR'},
'key_2': {'BR': ' signinfication of BR'},
'key_3': {'CR': ' signinfication of CR'}}
修改强>
建议使用@cᴏʟᴅsᴘᴇᴇᴅ,您可以在压缩前调用列表上的sorted
,这可确保两个词典具有相同的顺序:key_1
,key_2
,key_3
。您还可以对密钥进行初步检查,例如检查其交叉点,以确保两个字典都具有相同的密钥。
答案 2 :(得分:1)
你可以试试这个:
{'key_1': {'AR': 'signinfication of AR'}, 'key_3': {'CR': ' signinfication of CR'}, 'key_2': {'BR': ' signinfication of BR'}}
输出:
{{1}}