Python:合并两个列表

时间:2012-01-28 09:43:33

标签: python

我有两个列表

    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,但它不接受重复值。 是否可以根据第二个列表添加这些列表。

3 个答案:

答案 0 :(得分:7)

使用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()。 :)

答案 1 :(得分:4)

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中。

答案 2 :(得分:2)

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更快