如何在字典词典中找到列表长度的总和?

use*_*409 7 python dictionary sum list

在具有以下格式的数据集:

dataset = {
  "one" : { "a" : [ 0, 1, 2 ], "b" : [ 0,10,20 ] },
  "two" : { "a" : [ 0, 1 ], "b" : [ 0 ] }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种快速的方法来总结所有"a"列表的长度(并最终相同的"b").

因此,对于上述数据集,我将寻找总和为5(因为"一个"[a]有3个成员而"两个"[a]有2个成员,3 + 2通常是5个).

我认为这样的事情会起到作用,但我得到意想不到的结果(错误的数字):

print sum( len(e) for d in dataset for e in dataset[d]["a"] )
Run Code Online (Sandbox Code Playgroud)

我认为这将依次获取"一个"和"两个",并且每个都会查找"a"的长度.然后它将计算找到的所有长度的总和.它没有,我应该使用什么?

jon*_*rpe 7

你只对每个级别的值感兴趣,所以只需迭代这些:

>>> dataset = {
  "one": {"a": [0, 1, 2], "b": [0, 10, 20]},
  "two": {"a": [0, 1], "b": [0]}
}
>>> sum(len(lst) for dct in dataset.values() for lst in dct.values())
9
Run Code Online (Sandbox Code Playgroud)

对于嵌套字典中的特定键:

>>> key = 'a'
>>> sum(len(dct[key]) for dct in dataset.values())
5
Run Code Online (Sandbox Code Playgroud)

或者获取多个键的计数:

>>> {key: sum(len(dct[key]) for dct in dataset.values()) for key in 'ab'}
{'a': 5, 'b': 4}
Run Code Online (Sandbox Code Playgroud)