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())}