我确信这很愚蠢,但是我无法解决它。我有一本这样的字典,其中每个键的值数量不相等:

'John greased ': ['axle', 'wheel', 'wheels', 'wheel', 'engine', ''],
'Paul alleged ': ['truth', 'crime', 'facts', 'infidelity', 'incident', ''],
'Tracy freed ': ['animals', 'fish', 'slaves', 'slaves', 'slaves', 'pizza'],
'Lisa plowed ': ['field', 'field', '', '', '', ''],

我想知道每个键有多少个值,而不是每个唯一值,而是每个键有多少个 token (重复或不重复)。所以我会得到类似的结果:
John greased  5
Paul alleged  5
Tracy freed  6
Lisa plowed  2

我试图用下面的代码来解决这个问题:
for key, value in sorted(result.items()):
         print(key, len(value))

但是由于缺少值,因此所有长度都相同。
关于如何解决这个问题或在哪里找到的任何想法?非常感谢您的帮助。

最佳答案

解决此问题的一种方法是更改​​最后一行:

print(key, len([item for item in value if item]))

因此,您的完整代码是:
ITEMS = {
    'John greased ': ['axle', 'wheel', 'wheels', 'wheel', 'engine', ''],
    'Paul alleged ': ['truth', 'crime', 'facts', 'infidelity', 'incident', ''],
    'Tracy freed ': ['animals', 'fish', 'slaves', 'slaves', 'slaves', 'pizza'],
    'Lisa plowed ': ['field', 'field', '', '', '', ''],
}

for key, value in ITEMS.items():
    #print value
    print(key, len([item for item in value if item]))

您还可以将filterbool结合使用:
print(key, len(filter(bool, value)))

因此,循环:
for key, value in ITEMS.items():
    #print value
    print(key, len(filter(bool, value)))

您需要像python 3中的list一样在filter上应用print(key, len(list(filter(bool, value))))

关于python - 计算归因于一个键和python(3.2)字典的键有多少个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19843457/

10-14 22:07