gpt4 book ai didi

python - 带有值列表的字典

转载 作者:太空宇宙 更新时间:2023-11-04 06:53:20 26 4
gpt4 key购买 nike

我有一个文件,例如:

a 1
a 2
b 5
c 8
a 9

我想将每个键的第二个字段加在一起,这样我就有了一个聚合数,因此就有了一个键:值对。

对于大型数据集,我认为解决此问题的最佳方法是创建一个字典,其中包含每个唯一键的值列表。这是最好的方法吗?

我如何准确地设置每个键的值列表(下面的代码似乎覆盖值而不是追加)?

dict={}
file=open('foo.txt','r')
lines=file.readlines()
for line in lines:
k, v=line.split()
dict[k]=[v]

现在如果我想获取第一个字典中填充的聚合数字并将键和值与另一个字典中的键和值进行比较以确定两者之间的差异,我只能得出如下结论:

对于 res.keys() 中的我:

if res2.get(i):
print 'match',i
else:
print i,'does not match'

对于 res2.keys() 中的我:

if res.get(i):
print 'match',i
else:
print i,'does not match'

对于 res.values() 中的 i:

if res2.get(i):
print 'match',i
else:
print i,'does not match'

对于 res2.values() 中的 i:

if res.get(i):
print 'match',i
else:
print i,'does not match'

麻烦而且有问题...需要帮助!

最佳答案

使用 defaultdict计算总和:

from collections import defaultdict
res = defaultdict(int)
with open('foo.txt', 'r') as f:
for line in f:
k,v = line.split()
res[k] += int(v)
# res is now {"a": 12, "b": 5, "c": 8}

如果您不想要总和,而是想要元素列表,请将其修改为:

from collections import defaultdict
res = defaultdict(list)
with open('foo.txt', 'r') as f:
for line in f:
k,v = line.split()
res[k].append(v)
# res is now ["a": ["1", "2", "9"], "b": ["5"], "c": ["8"]]

请注意,我更改了一些变量名称,著名的 file 更改为 fdict 更改为 res。这是因为 filedict 是内置名称,因此应避免作为变量名称以避免混淆。

此外,readlines 不是必需的;您可以直接遍历文件。

另外,with声明确保文件在之后关闭。

关于python - 带有值列表的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9250640/

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