簡體   English   中英

計算字典中嵌套列表中的值數

[英]Count number of values in nested lists inside a 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

提前非常感謝您。

選項1
100%展平+ len

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

選項2
sum + len +部分展平
與生成器理解一起使用sum 3列表形式:

>>> 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
>>> len([c for a in d.values() for b in a for c in b])
17

您應該真正在交互式解釋器中嘗試這些方法,從最簡單的[x for x in d.values()]的方法開始[x for x in d.values()]然后[x for x in d.values()]

您無需為此任務創建平展列表。 這是一種方法:

from itertools import chain

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

我們通過兩次應用chain.from_iterable並處理此過程后的結果來處理嵌套列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM