我有以下元组列表:
[[("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']
