gpt4 book ai didi

python - 在指定条件下汇总子列表中包含的值

转载 作者:行者123 更新时间:2023-11-28 22:30:04 27 4
gpt4 key购买 nike

好的,所以我正在尝试着手解决我认为应该是一项容易的任务。我正在使用 Python3.4。

我有以下包含子列表的列表(简化版):

newlist = [ ['John', 12],['Mary', 10],['Paul', 12],['Mary', 5],['Paul', 8],['John', 7] ]

我正在尝试获取与每个唯一名称对应的所有值的总和。因此,关于上述列表,结果应该是这样的:

约翰 - 19

玛丽 - 15

保罗 - 20

实现此目标最快和/或最有效的方法是什么?

我自己努力的例子

现在我已经像这样解决了我的问题(但如前所述:我正在寻找更有效的解决方案):

unique_names = []
for i in newlist:
if i[0] not in unique_names:
unique_names.append(i[0])

valuelist = []
for name in unique_names:
valuelist.append(name)
yet_another_list = []
for i in newlist:
if name in i:
yet_another_list.append(i[1])
valuelist.append(sum(yet_another_list))

编辑

- 我测试了答案-

好的,所以我收到了很多回复,thnx!作为记录,我通过为每个建议的解决方案创建单独的函数来测试它们。我使用 start = time.perf_counter()end = time.perf_counter() - start 来计算每个函数的响应时间。我将导入封装在需要它们的每个函数中。

我用于此测试的列表包含 3985 个项目/子列表。

5 次不同运行的结果(四舍五入到小数点后 4 位),其中:

我自己的解决方案:0.9800/0.9703/0.9873/1.0023/0.9540

defaultdict try : 0.0014/0.0016/0.0014/0.0018/0.0014

counter try : 0.0030/0.0026/0.0026/0.0027/0.0026

reduce_try : 0.0155/0.0153/0.0151/0.0149/0.0174

ittertry : 0.0242/0.0268/0.0239/0.0307/0.0259( float 失败)

valuelisttry : 0.0018/0.0018/0.0019/0.0020/0.0043

总的来说,我真的很欣赏 defaultdict 语句的简单性。这似乎也是总体上最快的选择。然而,对于那些不喜欢导入的人来说,值列表(或者实际上是值字典)选项似乎也是一个不错的选择。

最佳答案

使用默认字典

from collections import defaultdict

values = defaultdict(int)

for x, y in newlist:
values[x]+=y

编辑:只需使用 defaultdict(int),int 已经是一个可调用的我没想到!

关于python - 在指定条件下汇总子列表中包含的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42670031/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com