如何在dict理解中写出另外两个条件

时间:2019-10-23 08:48:23

标签: python dictionary

2词典d1,d2,用相同的键创建一个新词典。

d1 = {'product': '8', 'order': '8', 'tracking': '3'}
d2 = {'order': 1, 'product': 1,'customer':'5'}
dict3 = { k: [ d1[k], d2[k] ] if k in d2 else [d1[k]] for k in d1 }
dict3
{'product': ['8', 1], 'order': ['8', 1], 'tracking': ['3']}

如何通过else [d2[k]] for k in d2获得期望的结果

我的期望值

{'product': ['8', 1], 'order': ['8', 1], 'tracking': ['3'],'customer':['5']}

免责声明。我已经完成了defaultdict。请仅在dict comprehension中给出答案

5 个答案:

答案 0 :(得分:3)

您必须遍历两个字典,以将所有键包含在新构造的字典中。

您可以使用defaultdict

from collections import defaultdict
res = defaultdict(list)
for key, value in d1.items():
    res[key].append(value)

for key, value in d2.items():
    res[key].append(value)

输出:

>>> dict(res)
>>> {'product': ['8', 1], 'order': ['8', 1], 'tracking': ['3'], 'customer': ['5']}

答案 1 :(得分:3)

使用defaultdict而不加理解是一种更好得多的方法,但应要求:

d1 = {'product': '8', 'order': '8', 'tracking': '3'}
d2 = {'order': 1, 'product': 1,'customer':'5'}

d3 = {
    k: [d1[k], d2[k]]
    if (k in d1 and k in d2)
    else [d1[k]]
    if k in d1
    else [d2[k]]
    for k in list(d1.keys()) + list(d2.keys())
}

d3现在是:

{'product': ['8', 1], 'order': ['8', 1], 'tracking': ['3'], 'customer': ['5']}

答案 2 :(得分:3)

可以使用嵌套的三元... if ... else (... if ... else ...),但是如果有三个或四个字典怎么办? 更好地使用嵌套列表理解,并迭代不同的字典。

>>> d1 = {'product': '8', 'order': '8', 'tracking': '3'}
>>> d2 = {'order': 1, 'product': 1,'customer':'5'}
>>> {k: [d[k] for d in (d1, d2) if k in d] for k in set(d1) | set(d2)}
{'customer': ['5'], 'order': ['8', 1], 'product': ['8', 1], 'tracking': ['3']}

答案 3 :(得分:2)

>>> d1 = {'product': '8', 'order': '8', 'tracking': '3'}
>>> d2 = {'order': 1, 'product': 1, 'customer': '5'}

>>> dict3 = {k: [d1[k], d2[k]] if k in d1 and k in d2 else [d1[k]] if k in d1 else [d2[k]] for list in [d1, d2] for k in list}
>>> dict3
{'product': ['8', 1], 'order': ['8', 1], 'tracking': ['3'],'customer':['5']}

答案 4 :(得分:1)

d1 = {'product': '8', 'order': '8', 'tracking': '3'}
d2 = {'order': 1, 'product': 1, 'customer': '5'}
list_ = []
for i in [d1, d2]:
    list_.append(i)

list_

[{'product': '8', 'order': '8', 'tracking': '3'}, {'order': 1, 'product': 1, 'customer': '5'}]

dict_={}
for d in list_:
    for k,v in d.items():
        dict_.setdefault(k,[]).append(v)
dict_

{'product': ['8', 1], 'order': ['8', 1], 'tracking': ['3'], 'customer': ['5']}

理解力

combined_key = {key for d in list_ for key in d}
combined_key

{'customer', 'order', 'product', 'tracking'}

super_dict = {key:[d[key] for d in list_ if key in d] for key in combined_key}
super_dict

{'customer': ['5'], 'tracking': ['3'], 'order': ['8', 1], 'product': ['8', 1]}