簡體   English   中英

Python:合並兩個列表

[英]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}

說明:

  1. zip(list1, list2)等同於序列(6, 'open'), (1, 'not open'), ..., (2, 'not open')

  2. 對於字典dict_outdict_out.get(k, 0)如果存在則返回dict_out[k] ,否則返回0

  3. 因此, 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.

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