Python 具有值列表的字典

Python 具有值列表的字典,python,Python,我有一个文件,例如: 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()

我有一个文件,例如:

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]
现在,如果我想获取第一个字典中填充的总数,并将键和值与另一个字典中的键和值进行比较,以确定两者之间的差异,我只能得出如下结论:

对于i in res.key:

if res2.get(i):
    print 'match',i
else:
    print i,'does not match'
对于res2.keys中的i:

if res.get(i):
    print 'match',i
else:
    print i,'does not match'
对于i,在res.values中:

if res2.get(i):
    print 'match',i
else:
    print i,'does not match'
对于res2.1中的i值:

if res.get(i):
    print 'match',i
else:
    print i,'does not match'
笨重的马车…需要帮助

这正是它的目的:

另外,不要使用dict作为变量名。你可以直接在一个文件上迭代;无需在此处使用.readlines。

这正是它的用途:


另外,不要使用dict作为变量名。你可以直接在一个文件上迭代;无需在此处使用.readlines。

如果您只需要一个运行总数,则无需创建一个附加元素的列表。您可以使用defaultdict并不断添加到它中,以获得运行总数

from collections import defaultdict
key_totals = defaultdict(int)
with open('foo.txt', 'r') as f:
    for line in f:
        k, v = line.split()
        key_totals[k] += int(v)

如果您只需要一个运行总数,则不需要创建一个列表来追加元素。您可以使用defaultdict并不断添加到它中,以获得运行总数

from collections import defaultdict
key_totals = defaultdict(int)
with open('foo.txt', 'r') as f:
    for line in f:
        k, v = line.split()
        key_totals[k] += int(v)
使用a计算总和:

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为f,dict为res。这是因为file和dict是内置的名称,因此应避免作为变量名,以避免混淆

此外,读线是不必要的;您可以直接迭代该文件

此外,该语句确保文件在之后关闭。

使用a计算总和:

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为f,dict为res。这是因为file和dict是内置的名称,因此应避免作为变量名,以避免混淆

此外,读线是不必要的;您可以直接迭代该文件


另外,该语句确保文件随后关闭。

如果这个或任何其他答案解决了您的问题,请考虑。RES[K]?AppEnv如果我有多个变量要追加,是否工作?例如,k,field1,field2,field3,field4=line.split res[k]。appendfield1,field2,field3,field4No,append只需要一个参数。虽然你可以多次调用,但是你可以简单地写RES[K] += [Fiel1,Field2,Field3,Field4]。如果这个或任何其他答案解决了你的问题,请考虑。例如,k,field1,field2,field3,field4=line.split res[k]。appendfield1,field2,field3,field4No,append只需要一个参数。虽然可以多次调用append,但只需编写res[k]+=[field1、field2、field3、field4]。