sort(dict,dict.get)如何处理重复值

Max*_*dal 2 python sorting dictionary

假设我在python中有一个字典,我按值对键进行排序,如下所示

my_dict = {'a':5, 'b':4, 'c':6, 'd':3, 'e':2}
sorted_list = sorted(my_dict, key=my_dict.get)
sorted_list
['e', 'd', 'b', 'a', 'c']
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果我在字典中有冲突(关于值)

my_dict = {'a':5, 'b':4, 'c':5, 'd':3, 'e':2, 'f':4, 'g':3}
sorted_list = sorted(my_dict, key=my_dict.get)
sorted_list
['e', 'd', 'g', 'b', 'f', 'a', 'c']
Run Code Online (Sandbox Code Playgroud)

在我看来,在重复的情况下,列表按字典中的顺序(数字顺序或插入顺序,而不是排序顺序)排序.我可以认为它适用于所有情况吗?

编辑1:我的键将是整数,如果值发生冲突,我希望生成的键按其值排序(最高位)

EDIT2:添加以下参数有助于我的问题.但是,在我的情况下,我希望值以升序排序,但键要按降序排序.下面将导致降序键= lambda x:(x [1],x [0])

Mar*_*ers 5

Python的排序算法(TimSort)是一种稳定的排序,因此具有相同排序"值"的任何项目都按照排序前的顺序保存.

排序字典键时,这意味着它们保持的顺序与返回dict.keys()字典时或返回字典时的顺序相同.请注意,此排序是任意的,并且对字典的更改不稳定.

否则是的,你可以认为对所有情况都是如此.

正如Steven Rumbalski所指出的那样,您可以使用键和排序来稳定同值排序:

sorted_list = sorted(my_dict, key=lambda k: (my_dict[k], k))
Run Code Online (Sandbox Code Playgroud)

  • 要按键的值排序,你的键函数需要返回值:`key = lambda k:(my_dict [k],k)` (2认同)