Python对值为整数的字典排序时等值项的排序规则疑问
解答
首先你当前使用的sorted(my_dict.values(), reverse=True)写法,仅提取了字典的所有值参与排序,完全没有携带键的信息,所以不存在值相等时按键的字母顺序排序的逻辑。
关于你当前写法的排序规则:
- 你传入sorted函数的参数是纯数值的可迭代对象,排序仅会基于数值本身的大小判断。
- Python的sorted是稳定排序算法,值相等的元素会保留它们在传入可迭代对象中的相对顺序:
- Python 3.7及以上版本中,字典默认保留插入顺序,
my_dict.values()返回值的顺序和键值对插入顺序一致,所以相等值的相对顺序和插入顺序一致。 - Python 3.6及更早版本中,字典的插入顺序不被官方保证,所以相等值的相对顺序也无法预判。
- Python 3.7及以上版本中,字典默认保留插入顺序,
如果你需要实现「值倒序排序,值相等时按键的字母序排序」的效果,需要同时将键值对传入sorted,通过key参数指定排序规则,示例代码如下:
my_dict = {"cat":20, "dog":23, "apple":20, "rabbit":52} # 排序规则:优先按值倒序,值相等则按键的字母正序 dict_sorted_items = sorted(my_dict.items(), key=lambda x: (-x[1], x[0])) # 转换为字典(Python3.7+可直接用dict,低版本需用collections.OrderedDict) sorted_dict = dict(dict_sorted_items)
上述代码运行后得到的sorted_dict结果为{'rabbit': 52, 'dog': 23, 'apple': 20, 'cat': 20},符合值相等时按键字母序排序的要求。
内容的提问来源于stack exchange,提问作者Ekalisood
相关产品推荐
相关产品推荐

