【问题标题】:Python count of items in a dictionary of lists列表字典中项目的 Python 计数
【发布时间】:2012-08-01 00:44:29
【问题描述】:

我有一个列表字典,我想为其添加一个值到特定列表... 我有以下列表字典。

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] 似乎不起作用

标签: python list dictionary


【解决方案1】:

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

【讨论】:

  • 看起来不错!有什么方法可以删除“计数器”部分并只返回带有数字的列表?
  • 它已经是一个类字典对象了,但是你可以用dict(c)把它变成一个纯字典。
【解决方案2】:
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 会将名称存储为键,并将值存储为它出现的次数。

【讨论】:

    猜你喜欢
    • 2021-07-11
    • 2010-10-15
    • 2022-12-04
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    相关资源
    最近更新 更多