Python: 在列表字典中使用 Counter
Python: use of Counter in a dictionary of lists
给定一个这样的列表字典:
d={0:[0.1,0.2,0.1], 1:[1.1,1.2,0.1], 2:[2.1,2.2,0.1]}
我希望能够计算每个单独的值在所有列表中出现的次数。在给出的示例中,预期结果将是:
occurrences={0.1:4, 0.2:1, 1.1:1, 1.2:1, 2.1:1, 2.2:1}
我想在这样的行中使用 Counter
:
occurrences = Counter([k[0] for k in d.values()])
但输出是Counter({0.1: 1, 1.1: 1, 2.1: 1})
,这意味着上一行只计算每个列表第一个元素的出现次数。
如何将此计数扩展到所有列表的所有元素?
因为你似乎并不关心字典的键,你可以只使用一个理解:
>>> Counter(v for sublist in d.values() for v in sublist)
Counter({0.1: 4, 0.2: 1, 1.1: 1, 1.2: 1, 2.1: 1, 2.2: 1})
您需要将所有值列表放在一个平面列表中,然后进行计数。您可以将字典的值列表传递给 itertools.chain.from_iterable
到 flatten 它们:
from collections import Counter
from itertools import chain
d={0:[0.1,0.2,0.1], 1:[1.1,1.2,0.1], 2:[2.1,2.2,0.1]}
c = Counter(chain.from_iterable(d.values()))
print(c)
# Counter({0.1: 4, 0.2: 1, 1.2: 1, 2.2: 1, 1.1: 1, 2.1: 1})
给定一个这样的列表字典:
d={0:[0.1,0.2,0.1], 1:[1.1,1.2,0.1], 2:[2.1,2.2,0.1]}
我希望能够计算每个单独的值在所有列表中出现的次数。在给出的示例中,预期结果将是:
occurrences={0.1:4, 0.2:1, 1.1:1, 1.2:1, 2.1:1, 2.2:1}
我想在这样的行中使用 Counter
:
occurrences = Counter([k[0] for k in d.values()])
但输出是Counter({0.1: 1, 1.1: 1, 2.1: 1})
,这意味着上一行只计算每个列表第一个元素的出现次数。
如何将此计数扩展到所有列表的所有元素?
因为你似乎并不关心字典的键,你可以只使用一个理解:
>>> Counter(v for sublist in d.values() for v in sublist)
Counter({0.1: 4, 0.2: 1, 1.1: 1, 1.2: 1, 2.1: 1, 2.2: 1})
您需要将所有值列表放在一个平面列表中,然后进行计数。您可以将字典的值列表传递给 itertools.chain.from_iterable
到 flatten 它们:
from collections import Counter
from itertools import chain
d={0:[0.1,0.2,0.1], 1:[1.1,1.2,0.1], 2:[2.1,2.2,0.1]}
c = Counter(chain.from_iterable(d.values()))
print(c)
# Counter({0.1: 4, 0.2: 1, 1.2: 1, 2.2: 1, 1.1: 1, 2.1: 1})