如何使用两个词典中的列表中的相同键来收集值

时间:2016-04-06 11:34:17

标签: python list dictionary

我正在寻找一种方法来使用一些常用键来插入两个词典。 如果两个词典中的键相同,则最终词典应包含两个词典中值的列表

D1 = {'A':1,'B':2,'C':3,'D':4}
D2 = {'A':10,'B':20,'X':3}
交叉这两个应该给出:

{'A':[1,10], 'B':[2,20]}

交叉部分与

一起正常工作
def intersect(D1,D2):
    newD = {}
    keys_D1 = set(D1.keys())
    keys_D2 = set(D2.keys())
    intersection = keys_D1 & keys_D2
    for i in intersection:
        newD[i] = D1.get(i)
    //...(looking for a way to append the values from D1 & D2 not just D1)
    return newD

newD = {'A':1,'B':2}

先谢谢!!

5 个答案:

答案 0 :(得分:4)

你可以通过列表理解来完成这个;

>>> D1 = {'A':1,'B':2,'C':3,'D':4}
>>> D2 = {'A':10,'B':20,'X':3}
>>> {a:[b, c] for a, b in D1.items() for a1, c in D2.items() if a == a1}
{'B': [2, 20], 'A': [1, 10]}
>>> 

答案 1 :(得分:2)

试试这个:

D1 = {'A':1,'B':2,'C':3,'D':4}
D2 = {'A':10,'B':20,'X':3}
newD = {}
for key in D1.keys():
    try:
        if(D2[key]):
            newD[key] = [D1[key],D2[key]]
    except KeyError:
        continue
print newD

此致

答案 2 :(得分:1)

你快到了。后:

intersection = keys_D1 & keys_D2

你只需要字典理解:

{key: [D1[key], D2[key]] for key in intersection}

如果你想用你的循环来做:

for i in intersection:
    newD[i] = [D1.get(i), D2.get(i)]

答案 3 :(得分:1)

D1 = {'A':1,'B':2,'C':3,'D':4}
D2 = {'A':10,'B':20,'X':3}

a_dict = {}

for key in D1:
    if key in D2:
        a_dict[key] = [D1[key], D2[key]]

a_dict     

答案 4 :(得分:0)

这个怎么样:

D1 = {'A':1,'B':2,'C':3,'D':4}
D2 = {'A':10,'B':20,'X':3}
D3 = {i:[] for i in list(set(D1.keys()) & set(D2.keys()))}
for i in D3:
    for j in [D1,D2]:
        D3[i].append(j[i])