繁体   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