python – 标识具有最大键数的值

前端之家收集整理的这篇文章主要介绍了python – 标识具有最大键数的值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个类似这样的词典:

 ip = { "1" : ['a','b'],"2" : ['a','c'],"3" : ['a','b','c','d'],"4" : ['a','d','e']}

我需要找到值集中的哪些项目具有最大数量的密钥,并且还按降序列出项目.输出将是这样的:

op = {"a":4,"b":3,"c":2,"d":2,"e":1}

但我在某处读到dict不能排序,所以输出也可以是一个元组:

op = [('a',4),('b',3),('c',2),('d',('e',1)]

我们可以遍历dict,并且对于值集中的每个项,将结果添加到该项的defaultdict中.

op = defaultdict(int)
for k,v in ip.iteritems():
    for item in v:
        op[item]+=1
op = sorted(op.items(),key=lambda x: x[1],reverse=True)

有没有比嵌套更快/更好的方法

最佳答案
只需使用Counter和chain.from_iterable

In [9]: from collections import Counter

In [10]: from itertools import chain

In [11]: ip = { "1" : ['a',...:       "2" : ['a',...:       "3" : ['a',...:       "4" : ['a','e']}

In [12]: Counter(chain.from_iterable(ip.values()))
Out[12]: Counter({'a': 4,'b': 3,'c': 2,'d': 2,'e': 1})

删除重复值,您可以始终执行以下操作:

>>> from operator import itemgetter
>>> sorted(Counter(chain.from_iterable(map(set,ip.values()))).items(),key=itemgetter(1),reverse=True)
[('a',1)]

猜你在找的Python相关文章