python联盟在保持价值元组的同时

时间:2014-06-09 13:03:20

标签: python dictionary merge

我有两个包含元组作为键的python词典,并作为值浮动,以便它们显示为

dict1 = {(name1,name2):data1a, (name2,name3):data2a, ...}

dict2 = {(name1,name2):data1b, (name2,name3):data2b, ...}

字典的长度不一样,我想基于它们的键来执行它们的联合,这样我就留下了一个字典,其中包含两个值的元组。这将显示为

dict_unified = {(name1, name2) : (data1a,data1b), (name2,name3) : (data2a,data2b)}

我知道dictionary.update()有效地进行了这次合并,但它包含的密钥值对只存在于我想要排除的单个字典中,并且只为每个密钥保留一个值。

2 个答案:

答案 0 :(得分:0)

使用字典理解怎么样:

{key: (value1, dict2[key]) for key, value1 in dict1.iteritems() if key in dict2}

这会保留dict1dict2共有的密钥,并将它们的值合并到元组中。

答案 1 :(得分:0)

要获取属于这两个词典的键,可以使用set.intersection(因为这是一个交集,而不是联合):

>>> d1 = {(1, 2): 3, (4, 5): 6}
>>> d2 = {(1, 2): 7, (8, 9): 10}
>>> set(d1).intersection(d2)
{(1, 2)}

然后使用两个词典中的相应值构建一个字典:

>>> {k: (d1[k], d2[k]) for k in set(d1).intersection(d2)}
{(1, 2): (3, 7)}