x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
print(x.keys())
s1 = [item[0] for item in sorted(x.items(), key=lambda item: (item[1], item[0]), reverse=True)]
s2 = [item[0] for item in sorted(x.items(), key=lambda item: item[1], reverse=True)]
print(s1)
print(s2)
打印件如下:
dict_keys([1, 3, 4, 2, 0])
[3, 4, 1, 2, 0]
[3, 4, 1, 2, 0]
我通常使用第二种方法对字典按值排序,但是今天我看到别人的代码使用第一种方法对字典排序。
它们是完全一样的东西吗?根据打印结果,它们看起来是一样的。
在本例中,结果是相同的,因为键集和值集之间存在双射。如果几个键共享相同的值(例如:键3和键4共享值3),结果会出现分歧,如下所示:
x = {1: 2, 3: 3, 4: 3, 2: 1, 0: 0}
你的代码打印:
dict_keys([1, 3, 4, 2, 0])
[4, 3, 1, 2, 0]
[3, 4, 1, 2, 0]
s1在这种情况下,字典同时对值和键进行排序,所以当两个键共享一个公共值时,它们也会被排序。
在<<li>strong> s2 只对大小写值进行排序。由于排序算法是稳定的,当两个键共享相同的值时,它们的相对顺序在结果中保持不变。