Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用字典理解来保持一个连续的总和_Python - Fatal编程技术网

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)) }