簡體   English   中英

如何在兩個字典中使用多個鍵列表值

[英]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()d1d2中獲取相應的項目。 然后,我連接它們的鍵,使其成為新字典的鍵,並使用列表推導式對各自列表的元素求和,並將其設置為新字典中的值。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM