[英]How to multiple key list values in two dictionaries
例如我有以下內容
d1 = {'a': [100,300,34], 'b': [200,98,45], 'c':[450,567,300]}
d2 = {'d': [300,500,234], 'e': [300,500,234], 'f':[300,500,234]}
想要得到
d3 = {'ad': [400,800,268], 'be': [500,598,279], 'cf':[750,1067,534]}
我有以下想法開始: for i, j in d1.items():
for x, y in d2.items():
在這里,我使用嵌套理解來實現你想要的。 首先,我使用zip()
在d1
和d2
中獲取相應的項目。 然后,我連接它們的鍵,使其成為新字典的鍵,並使用列表推導式對各自列表的元素求和,並將其設置為新字典中的值。
d3 = {
i1[0] + i2[0]: [v1 + v2 for v1,v2 in zip(i1[1], i2[1])]
for i1,i2 in zip(d1.items(), d2.items())
}
# {'ad': [400, 800, 268], 'be': [500, 598, 279], 'cf': [750, 1067, 534]}
請注意,在 Python 3.7 之前,字典的“順序”是任意的。 現在,當您調用.items()
時,您將按照最近添加或定義的順序獲得鍵,但在此之前您可以按任何順序獲得它們,因此上述方法不起作用。
你可以這樣做:
d3 = {k1 + k2: [p + q for p, q in zip(d1[k1], d2[k2])] for k1, k2 in zip(d1.keys(), d2.keys())}
要么
不使用字典理解:
d3 = {}
for k1, k2 in zip(d1.keys(), d2.keys()):
d3[k1 + k2] = [p + q for p, q in zip(d1[k1], d2[k2])]
Output:
{'ad': [400, 800, 268], 'be': [500, 598, 279], 'cf': [750, 1067, 534]}
如果要維護鍵的順序,請確保使用OrderedDict 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.