当前位置:  开发笔记 > 编程语言 > 正文

计算字典列表中的公共键值对

如何解决《计算字典列表中的公共键值对》经验,为你挑选了1个好方法。

假设我有一个共享密钥的字典列表,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'}]

在这里我只关心objectcolor.我想计算一下红色方块和蓝色三角形的数量.这意味着找到次数{'object':'square', 'color':'red'}{'object':'triangle', 'color':'blue'}发生次数.换句话说,我需要在像这样的字典列表中找到键值对中的共性数.

最终结果可能是这样的:

{('square', 'red'): 3, ('triangle', 'blue'):2}

有什么简单的方法可以做到这一点?



1> Martijn Piet..:

只需使用一个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)]

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有