Python 3.x Python字典理解没有正确计数

Python 3.x Python字典理解没有正确计数,python-3.x,dictionary-comprehension,Python 3.x,Dictionary Comprehension,通过一周前完成的NCSS挑战赛中的一些代码,我试图用理解取代列表和字典,但我无法让dict理解发挥作用 我有密码 for i in a: b[i] = b[i] + 1 我试着用 b=dict((i,b[i]+1)表示a中的i) 但那不行,我不知道如何让字典正确计数 完整代码: a = [i[:-1] for i in open("votes.txt")] b = {} for i in open("votes.txt"): b[i[:-1]] = 0 #b = dict((i,

通过一周前完成的NCSS挑战赛中的一些代码,我试图用理解取代列表和字典,但我无法让dict理解发挥作用

我有密码

for i in a:
  b[i] = b[i] + 1
我试着用

b=dict((i,b[i]+1)表示a中的i)

但那不行,我不知道如何让字典正确计数

完整代码:

a = [i[:-1] for i in open("votes.txt")]
b = {}

for i in open("votes.txt"):
  b[i[:-1]] = 0

#b = dict((i, b[i] + 1) for i in a)
for i in a:
  b[i] = b[i] + 1

for i in b:
  print(str(i) + ': ' + str(b[i]))
我知道我的代码不是很好,我最近才开始写,请不要硬下结论

vows.txt:

Pedro Sanchez
Trisha Jenner
Trisha Jenner
Summer Wheatley
Pedro Sanchez
Pedro Sanchez
Trisha Jenner
Pedro Sanchez
Summer Wheatley
我的代码在循环中使用for i可以正常工作,但使用字典理解,它会显示以下文本

我希望输出能够显示出来

Pedro Sanchez: 4
Trisha Jenner: 3
Summer Wheatley: 2
使用听写理解时 但它却显示了

Pedro Sanchez: 1
Trisha Jenner: 1
Summer Wheatley: 1

您的代码不起作用,因为等号右侧的表达式在指定左手名称之前进行求值,因此每次它查找
b[i]
时都会看到
0
,如前一步所定义

至于如何修复它,最终您希望使用它,它基本上是dict上的包装器:

from collections import Counter

with open("votes.txt") as f:
    a = f.read().splitlines()

b = Counter(a)
for k, count in b.items():
    print('{}: {}'.format(k, count))
输出:

佩德罗·桑切斯:4 特里沙·詹纳:3 夏惠利:2
好吧,我用你的代码得到了正确的结果。相关:顺便说一句,这是函数调用中的生成器表达式,不是dict理解。等效的听写理解是a中i的
{i:b[i]+1