【发布时间】:2012-09-15 21:58:00
【问题描述】:
假设我在 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']
这很好用,但如果我的字典中有冲突(关于值)
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']
在我看来,在重复的情况下,列表按其在字典中的顺序(数字顺序或插入顺序,而不是排序顺序)排序。我可以假设它适用于所有情况吗?
EDIT1:我的键将是整数,如果值发生冲突,我希望结果键按它们的值排序(最高优先)
EDIT2:添加以下参数有助于我的问题。但是,在我的情况下,我希望值按升序排序,但键按降序排序。以下将导致两者都下降 键=lambda x: (x[1],x[0])
【问题讨论】:
-
升序降序将第二项设为负数:
sorted(my_dict, key=lambda k: (my_dict[k],-k)。请注意,这只会为您提供排序的键。如果您需要排序的键值对,请执行以下操作:sorted(my_dict.iteritems(), key=lambda item: (item[0], -item[1]))
标签: python sorting dictionary