计算字典内嵌套列表中的值的数量

时间:2018-05-10 22:46:26

标签: python list dictionary

我有以下字典:

d= {
'2018-01-01': [[1.0],        [2.0],        [3.0]],
'2018-01-02': [[4.0],        [5.0],        [6.0]],
'2018-01-03': [[7.0],        [8.0],        [9.0]],
'2018-01-04': [[10.0],       [11.0],       [12.0]],
'2018-01-31': [[13.0, 14.0], [15.0, 16.0], [17.0]]
}

我的目标是计算值的数量(在这种情况下为浮点数),假设其中一些'单元'可能包含多个值(例如:'2018-01-31'的值)。换句话说,我需要:

result=17

到目前为止,我能够计算出'细胞的数量。 (子列表),但是我无法知道如何计算单个单元格中的多个值'。我试过了:

cols=len(d[[k for k in d.keys() if d[k]==max(d.values(),key=len)][0]])
cells = [[1 for j in range(cols)] for i in range(len(d))]
result = len([item for sublist in cells for item in sublist])

print(str(result))

输出:

15

非常感谢你。

2 个答案:

答案 0 :(得分:2)

选项1
100%压扁+ len

>>> len([k for i in d.values() for j in i for k in j])
17

选项2
sum + len +部分扁平化 使用sum生成器理解。 3-list表格:

>>> sum(len([*a, *b, *c]) for (a, b, c) in d.values())
17

对于通用解决方案(包含多于/少于3个子列表),请使用itertools.chain

>>> from itertools import chain
>>> sum(len(list(chain.from_iterable(v))) for v in d.values())
17

答案 1 :(得分:1)

您无需为此任务创建拼合列表。这是一种方式:

from itertools import chain

res = sum(1 for _ in chain.from_iterable(map(chain.from_iterable, d.values())))

我们通过两次应用chain.from_iterable并在此过程后计算结果来处理嵌套列表。