Python 3.x 按相同值的数量对Python字典排序的最佳方法
我有一本字典如下:Python 3.x 按相同值的数量对Python字典排序的最佳方法,python-3.x,Python 3.x,我有一本字典如下: input = {1:'a', 2:'b', 3:'c', 4:'b', 5:'c', 6:'b'} a-1次 b-3次 c-2次 我想对字典进行排序,使重复次数最多的值首先出现,然后是重复次数第二多的值,以此类推 期望输出 output = {1:'b', 2:'c', 3:'a'} 请帮忙 提前感谢为Python 3兼容性而编辑 from collections import Counter i = {1:'a', 2:'b', 3:'c', 4:'b', 5:'c'
input = {1:'a', 2:'b', 3:'c', 4:'b', 5:'c', 6:'b'}
a-1次
b-3次
c-2次
我想对字典进行排序,使重复次数最多的值首先出现,然后是重复次数第二多的值,以此类推
期望输出
output = {1:'b', 2:'c', 3:'a'}
请帮忙
提前感谢为Python 3兼容性而编辑
from collections import Counter
i = {1:'a', 2:'b', 3:'c', 4:'b', 5:'c', 6:'b'}
print (Counter(i.values()))
#Output
Counter({'b': 3, 'c': 2, 'a': 1})
首先,您需要意识到您甚至不关心输入dict键,只关心输入dict值
real_input = input.values()
其次,您需要计算发生次数:
counted_items = collections.Counter(real_input)
第三,您希望按从最常见到最不常见的顺序对它们进行迭代.most_common()
按预期顺序返回(键、计数)元组列表
most_common_in_order = counted_items.most_common()
之后,您希望将该列表转换为dict,并将连续的INEGER作为键
result = {i: v for i, (v, _) in zip(itertools.count(1), most_common_in_order)}
或者,以简明的形式:
result = {i: v for i, (v, _) in zip(itertools.count(1),
collections.Counter(input.values()).most_common())}
请注意,字典本质上是不排序的,所以实际的顺序是实现细节,这是不保证的。不能对字典排序。也许是收集。订购信息。但让我们先看看您的尝试。enumerate接受附加参数,
start
-它可以用来将计数器初始化为1。@ukaszRogalski:当然,为什么不呢。谢谢你的提示。考虑到它离期望的输出相差甚远,这到底是一个什么样的公认答案?
result = {i: v for i, (v, _) in zip(itertools.count(1),
collections.Counter(input.values()).most_common())}