假设我有一个字典列表,它们都共享键 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()
object ,为它提供值的元组:
from collections import Counter
result = Counter((d['object'], d['color']) for d in inpt)
这为您提供了一个带有 (object, color)
键的字典子类。您可以使用 Counter.most_common()
method 以降序排列的方式获取元组列表。 :
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)]
关于python - 计算字典列表中的公共(public)键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34246056/