假设我有一个共享密钥的字典列表,color
并且object
:
inpt = [{'object':'square', 'color':'red', 'size':'big'}, {'object':'square', 'color':'red', 'coord':(0,0)}, {'object':'square', 'color':'red'}, {'object':'triangle', 'color':'blue', 'adj':'beautiful'}, {'object':'triangle', 'color':'blue', 'attr':'none'}]
在这里我只关心object
和color
.我想计算一下红色方块和蓝色三角形的数量.这意味着找到次数{'object':'square', 'color':'red'}
和{'object':'triangle', 'color':'blue'}
发生次数.换句话说,我需要在像这样的字典列表中找到键值对中的共性数.
最终结果可能是这样的:
{('square', 'red'): 3, ('triangle', 'blue'):2}
有什么简单的方法可以做到这一点?
只需使用一个collections.Counter()
对象,为它提供值的元组:
from collections import Counter result = Counter((d['object'], d['color']) for d in inpt)
这为您提供了一个带(object, color)
键的字典子类.您可以使用以下Counter.most_common()
方法按递减计数顺序获取元组列表:
result = result.most_common()
演示:
>>> from collections import Counter >>> inpt = [{'object':'square', 'color':'red', 'size':'big'}, ... {'object':'square', 'color':'red', 'coord':(0,0)}, ... {'object':'square', 'color':'red'}, ... {'object':'triangle', 'color':'blue', 'adj':'beautiful'}, ... {'object':'triangle', 'color':'blue', 'attr':'none'}] >>> Counter((d['object'], d['color']) for d in inpt) Counter({('square', 'red'): 3, ('triangle', 'blue'): 2}) >>> _.most_common() [(('square', 'red'), 3), (('triangle', 'blue'), 2)]