Python中字典列表项的计数

7

我有一个列表的字典,我想要向特定的列表中添加一个值... 我有以下的列表字典。

d = {'a': [4,'Adam', 2], 'b': [3,'John', 4], 'c': [4,'Adam', 3], 'd': [4,'Bill' 3], 'e': [4,'Bob'], 'f': [4, 'Joe'], 'g': [4, 'Bill']}

我希望能够统计名称的数量并返回结果。因此,在这种情况下,它可能是这样的:

Adam: 2
Bill: 2
John: 1
Bob: 1
Joe: 1

为了使事情更简单,所有名称都是列表中的第二个元素。
for i in d:
     d[i][1]

有什么高效的方法可以做到这一点吗?我目前只是手动检查每个名称并计数并返回结果 =/

提前感谢!


如果它不仅在第1个位置,而是必须通过i[x]访问其中的某个位置x,会发生什么情况?如果您遍历所有d.itervalues,values[x]似乎无法正常工作。 - user1530318
2个回答

17

collections.Counter 通常用于计算数量。

>>> from collections import Counter
>>> d = {'a': [4,'Adam', 2], 'b': [3,'John', 4], 'c': [4,'Adam', 3], 'd': [4,'Bill', 3], 'e': [4,'Bob'], 'f': [4, 'Joe'], 'g': [4, 'Bill']}
>>> # create a list of only the values you want to count,
>>> # and pass to Counter()
>>> c = Counter([values[1] for values in d.itervalues()])
>>> c
Counter({'Adam': 2, 'Bill': 2, 'Bob': 1, 'John': 1, 'Joe': 1})

看起来不错!有没有办法去掉“计数器”部分,只返回带数字的列表? - user1530318
1
它已经是一个类似字典的对象,但你可以使用dict(c)将其转换为纯字典。 - monkut

1
d = {'key': 'value'}
temp_dict = {}
for key, values in d.items():
    if values[1] in temp_dict:
        temp_dict[values[1]] = temp_dict[values[1]] + 1
    else:
        temp_dict[values[1]] = 1

这段代码比之前的答案要长,但它只是另一种产生相同结果的方式。无论如何,temp_dict将把名称存储为键,值为它出现的次数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接