我有以下元组列表:
[[("AA","AA"),("QQ","")],[("CC",""),("QQ","")],...]
当元组的第二项是 ""
时,我想获取每个值作为元组的第一项出现的频率。
上面的例子是这样的:
{"QQ":2, "CC":1}
最佳答案
我会使用 collections.Counter
+ itertools.chain
来完成:
>>> data = [[("AA","AA"),("QQ","")],[("CC",""),("QQ","")]]
>>> from itertools import chain
>>> from collections import Counter
>>> Counter(left for left, right in chain.from_iterable(data) if not right)
Counter({'QQ': 2, 'CC': 1})
这是有效的,因为 Counter
计算它被喂食的东西:
>>> Counter(["QQ", "QQ", "AA", "CC"])
Counter({'QQ': 2, 'AA': 1, 'CC': 1})
itertools.chain.from_iterable
可用于扁平化数据
:
>>> list(chain.from_iterable(data))
[('AA', 'AA'), ('QQ', ''), ('CC', ''), ('QQ', '')]
我们使用 genexp 只选择第二个为空的项(对于字符串可以简单地写成 if not somestring
):
>>> list(left for left, right in chain.from_iterable(data) if not right)
['QQ', 'CC', 'QQ']
关于python - 满足列表列表中条件的元组中值的频率分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20103993/