[英]Python: Merging Two Lists
我有兩個清單
list1= [6, 1, 8, 1, 2]
list2= ["Mail Opened", "Mail Not Opened", "Mail Opened", "Mail Not Opened", "Mail Not Opened"]
我想嘗試的結果
(14,"mailopened") (4,"mailnotopened")
首先我試圖將它們轉換為Dict但它不接受重復值。 可以根據第二個列表添加這些列表。
使用defaultdict
並簡單地添加list1
的值。
from collections import defaultdict
list1 = [6, 1, 8, 1, 2]
list2 = ["Mail Opened", "Mail Not Opened", "Mail Opened", "Mail Not Opened", "Mail Not Opened"]
added = defaultdict(int)
for i, k in enumerate(list2):
added[k] += list1[i]
這是有效的,因為如果訪問的密鑰不存在,則defaultdict
提供默認值。 在這種情況下,它將提供默認值0
因為我們指定它是int
類型。
使用從@GaretJax竊取的enumerate()
。 :)
dict_out = dict()
for list1_val, k in zip(list1, list2):
dict_out[k] = dict_out.get(k, 0) + list1_val
輸出:
In [10]: dict_out
Out[10]: {'not open': 4, 'open': 14}
說明:
zip(list1, list2)
等同於序列(6, 'open'), (1, 'not open'), ..., (2, 'not open')
。
對於字典dict_out
, dict_out.get(k, 0)
如果存在則返回dict_out[k]
,否則返回0
。
因此, for
循環遍歷五個(值,鍵)對並將它們累積在字典dict_out
。
from collections import defaultdict
list1 = [6, 1, 8, 1, 2]
list2 = ["Mail Opened", "Mail Not Opened", "Mail Opened", "Mail Not Opened", "Mail Not Opened"]
d = defaultdict(lambda:0)
for i, k in enumerate(list2):
d[k]+=list1[i]
print d
print d.items()
編輯:使用相同的解決方案,voitos更快(見上文)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.