Python 如何使用字典理解来保持一个连续的总和
我有一个文件分数,看起来像:Python 如何使用字典理解来保持一个连续的总和,python,Python,我有一个文件分数,看起来像: z:100 a:50 c:75 a:-20 c:45 a:10 c:20 z:10 z:-50 我想返回一个字典,键是字母,值是字母在文件中的值的总和。我不确定在使用这种方法时如何保持一笔金额 我有 a = {key: value for (key,value) in [line.strip().split(":") for line in open("scores.txt","r")]} print a 我建议不要把所有的东西都塞进一行。您可以这样做(使
z:100
a:50
c:75
a:-20
c:45
a:10
c:20
z:10
z:-50
我想返回一个字典,键是字母,值是字母在文件中的值的总和。我不确定在使用这种方法时如何保持一笔金额
我有
a = {key: value for (key,value) in [line.strip().split(":") for line in open("scores.txt","r")]}
print a
我建议不要把所有的东西都塞进一行。您可以这样做(使用): 你确定你想要一本“一行”字典吗
from itertools import imap, groupby
from operator import methodcaller, itemgetter
a = { k : sum(int(v[1]) for v in v_itr)
for k, v_itr in groupby(sorted(imap(methodcaller("split", ":"),
imap(methodcaller("rstrip"),
open("scores.txt", "r"))),
key=itemgetter(0)), itemgetter(0)) }
(这不是实际使用此代码的建议;请使用arshajii答案中的循环。)
使用生成器表达式而不是嵌套调用imap
,这是一个更易于阅读的版本
a = { k : sum(int(v[1]) for v in v_itr)
for k, v_itr in groupby(sorted(line.rstrip().split(":")
for line in open("scores.txt", "r"),
key=itemgetter(0)), itemgetter(0)) }
…那么你做了什么?你想要什么?你为什么不这么多行,然后考虑它是否值得压缩到理解?你有什么真正的理由想要写一个理解吗?换行是免费的;写一个循环。
a = { k : sum(int(v[1]) for v in v_itr)
for k, v_itr in groupby(sorted(line.rstrip().split(":")
for line in open("scores.txt", "r"),
key=itemgetter(0)), itemgetter(0)) }