Python计算dict值中的项目是列表

时间:2013-05-31 19:56:40

标签: python list dictionary count python-3.3

Python 3.3,这种形式的键值对字典。

d = {'T1': ['eggs', 'bacon', 'sausage']}

值是可变长度的列表,我需要迭代列表项。这有效:

count = 0
for l in d.values():
   for i in l: count += 1

但它很难看。必须有更多的Pythonic方式,但我似乎无法找到它。

len(d.values()) 

生成1.它是1个列表(DUH)。尝试使用来自here的计数器会出现“不可用类型”错误。

5 个答案:

答案 0 :(得分:38)

使用sum()和每个字典值的长度:

count = sum(len(v) for v in d.itervalues())

如果您使用的是Python 3,那么只需使用d.values()

使用您的输入样本和我的一个快速演示:

>>> d = {'T1': ['eggs', 'bacon', 'sausage']}
>>> sum(len(v) for v in d.itervalues())
3
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']}
>>> sum(len(v) for v in d.itervalues())
7

此处Counter对您没有多大帮助,您没有为每个条目创建一个计数,而是计算所有值的总长度。

答案 1 :(得分:9)

>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']}
>>> sum(map(len, d.values()))
7

答案 2 :(得分:0)

当我找到这个主题时,我正在寻找答案,直到我意识到我已经在我的代码中有一些东西用于此。这就是我想出的:

count = 0

for key, values in dictionary.items():
        count = len(values)

如果要保存每个字典项的计数,可以创建一个新字典来保存每个字的计数。

count = {}

for key, values in dictionary.items():
        count[key] = len(values)

我无法确切地找到此方法可用的版本,但我认为.items方法仅适用于Python 3。

答案 3 :(得分:0)

在树屋做我的作业我想出了这个。它至少可以通过一步(我知道)变得更简单,但初学者(比如我自己)可能更容易理解这个版本。

dict = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['bread', 'butter', 'tosti']}

total = 0

for value in dict:
    value_list = dict[value]
    count = len(value_list)
    total += count

print(total)

答案 4 :(得分:0)

对我来说,最简单的方法是:

winners = {1931: ['Norman Taurog'], 1932: ['Frank Borzage'], 1933: ['Frank Lloyd'], 1934: ['Frank Capra']}

win_count_dict = {}

for k,v in winners.items():
    for winner in v:
        if winner not in win_count_dict:
            win_count_dict[winner]=1
        else:
            win_count_dict[winner]+=1


print("win_count_dict = {}".format(win_count_dict))