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