簡體   English   中英

Python將兩個列表合並到字典中,添加值

[英]Python merging two list into dictionaries, add values

給定以下兩個列表,一個包含字符串,一個包含整數,如何在添加重復鍵的值時將這兩個列表合並到字典中?

字符串列表 = [“EL1”、“EL2”、“EL1”、“EL3”、“El4”]

整數列表 = [1, 2, 12, 4, 5]

所以在最終的字典中,我希望 EL1 是 13,因為它還包含 1 和 12。

resultdictionary = {}
for key in appfinal:
    for value in amountfinal:
        resultdictionary[key] = value
        amountfinal.remove(value)
        break

在這種情況下,結果字典會刪除任何重復的鍵,但會采用與這些鍵匹配的最后一個值。 因此,EL1 將是 12。

有任何想法嗎? 謝謝你。

使用defaultdict()創建一個字典,根據需要自動創建鍵。

使用zip()將兩個列表一起循環。

from collections import defaultdict

resultdictionary = defaultdict(int)
for key, val in zip(stringlist, integerlist):
    resultdictionary[key] += val

一種可能的解決方案是將dict.get與 defaultvalue 0一起使用。 例如:

stringlist = ["EL1", "EL2", "EL1", "EL3", "El4"]
integerlist = [1, 2, 12, 4, 5]

resultdictionary = {}
for s, i in zip(stringlist, integerlist):
    resultdictionary[s] = resultdictionary.get(s, 0) + i

print(resultdictionary)

印刷:

{'EL1': 13, 'EL2': 2, 'EL3': 4, 'El4': 5}

有趣的滑稽解決方案:

stringlist = ["EL1", "EL2", "EL1", "EL3", "El4"]

integerlist = [1, 2, 12, 4, 5]

result = {}
result.update((k, result.get(k, 0) + v) for k, v in zip(stringlist, integerlist))
print(result)

在線嘗試!

幾乎是單行的,但仍然需要先將result定義為空dict ,因此它可以使用一個可以懶惰地檢查總和的值的genexpr 。

我實際上不推薦這個。 一方面,我不確定語言規范是否嚴格要求dict.update評估惰性提供的參數; 如果它試圖通過首先將其轉換為dict然后合並來進行優化,這將失敗。 另一方面,它很容易被破壞(維護者可能會盲目地將genexpr 轉換為dictcomp 或listcomp,現在它急切而被破壞)。 而且,雖然從技術上講,genexpr 本身沒有副作用,但它依賴於它被result.update消耗的副作用,這是一種明顯的非功能設計,與 genexprs 的功能風格不一致。

沒有進口的最快方式是這樣的:

stringlist = ["EL1", "EL2", "EL1", "EL3", "El4"]

integerlist = [1, 2, 12, 4, 5]

#Convert two Lists into Dictionary using zip()
mergeLists = dict(zip(stringlist, integerlist))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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