如何用单值合并Python中的2个词典

时间:2014-04-23 16:58:49

标签: python dictionary

我想合并这些词典:

d1 = {'r1':[100,200,300],'r2':[400,500]}
d2 = {100:[110,120,130],200:[210,220],300:[310,320],400:[410,420],500:[510,520]}
像这样:

d3 = {'r1':[100,[110,120,130],200,[210,220],300,[310,320]],'r2':[400,[410,420],500, [510,520]]}

我该怎么做?

4 个答案:

答案 0 :(得分:1)

我喜欢这个问题。

>>> d3 = {k: [a for i in v for a in (i, d2[i])] for k, v in d1.items()}
>>> d3
{'r1': [100, [110, 120, 130], 200, [210, 220], 300, [310, 320]], 'r2': [400, [410, 420], 500, [510, 520]]}

eveyone似乎只是从您想要的输出中稍微偏离,但这看起来像是对我来说。

这是一个非常嵌套的列表推导和dict comprehenions的使用。

答案 1 :(得分:0)

dict( (k, v + [ d2[k2] for k2 in v if k2 in d2 ]) for k,v in d1.iteritems())

答案 2 :(得分:0)

d3 = {}
for k, v in d1.items():
    new_v = []
    for k2 in v:
        new_v.append(k2)
        new_v.append(d2.get(k2, []))
    d3[k] = new_v

答案 3 :(得分:0)

In [102]:

import itertools
{k:list(itertools.chain(*zip(item, map(d2.get, item)))) for k, item in d1.items()}
Out[102]:
{'r1': [100, [110, 120, 130], 200, [210, 220], 300, [310, 320]],
 'r2': [400, [410, 420], 500, [510, 520]]}