我正在尝试使用sorted
>>> help(sorted)
Help on built-in function sorted in module __builtin__:
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
我刚刚给出了要排序的列表,并根据id
进行排序。
>>>l = [{'id': 4, 'quantity': 40}, {'id': 1, 'quantity': 10}, {'id': 2, 'quantity': 20}, {'id': 3, 'quantity': 30}, {'id': 6, 'quantity': 60}, {'id': 7, 'quantity': -30}]
>>> sorted(l) # sorts by id
[{'id': -1, 'quantity': -10}, {'id': 1, 'quantity': 10}, {'id': 2, 'quantity': 20}, {'id': 3, 'quantity': 30}, {'id': 4, 'quantity': 40}, {'id': 6, 'quantity': 60}, {'id': 7, 'quantity': -30}]
>>> l.sort()
>>> l # sorts by id
[{'id': -1, 'quantity': -10}, {'id': 1, 'quantity': 10}, {'id': 2, 'quantity': 20}, {'id': 3, 'quantity': 30}, {'id': 4, 'quantity': 40}, {'id': 6, 'quantity': 60}, {'id': 7, 'quantity': -30}]
sorted
的许多示例都表示需要key
对dict列表进行排序。但我没有给任何key
。为什么它没有根据quantity
排序?它是如何选择使用id
排序的?
我尝试了另一个名字&年龄,
>>> a
[{'age': 1, 'name': 'john'}, {'age': 3, 'name': 'shyam'}, {'age': 30,'name': 'ram'}, {'age': 15, 'name': 'rita'}, {'age': 5, 'name': 'sita'}]
>>> sorted(a) # sorts by age
[{'age': 1, 'name': 'john'}, {'age': 3, 'name': 'shyam'}, {'age': 5, 'name':'sita'}, {'age': 15, 'name': 'rita'}, {'age': 30, 'name': 'ram'}]
>>> a.sort() # sorts by age
>>> a
[{'age': 1, 'name': 'john'}, {'age': 3, 'name': 'shyam'}, {'age': 5, 'name':'sita'}, {'age': 15, 'name': 'rita'}, {'age': 30, 'name': 'ram'}]
此处根据age
排序,但不排序name
。我在这些方法的默认行为中缺少什么?
答案 0 :(得分:3)
来自某些old Python docs:
映射(字典)比较相等,当且仅当它们的排序(键,值)列表比较相等时。除了平等以外的结果一致地得到解决,但没有另外定义。
早期版本的Python使用了排序(键,值)列表的字典比较,但对于比较相等的常见情况,这是非常昂贵的。甚至更早版本的Python仅通过标识比较字典,但这引起了惊喜,因为人们希望能够通过将字典与{}进行比较来测试字典的空白。
忽略默认行为,只提供key
。
答案 1 :(得分:0)
默认情况下,它会与找到的第一个差异进行比较。如果你正在排序字典,这是非常危险的(一致但尚未定义)。
将函数传递给key=
参数,该参数从列表中获取值(在本例中为字典)并返回值以进行排序。
>>> a
[{'age': 1, 'name': 'john'}, {'age': 3, 'name': 'shyam'}, {'age': 30,'name': 'ram'}, {'age': 15, 'name': 'rita'}, {'age': 5, 'name': 'sita'}]
>>> sorted(a, key=lambda d : d['name']) # sorts by name
[{'age': 1, 'name': 'john'}, {'age': 30, 'name': 'ram'}, {'age': 15, 'name': 'rita'}, {'age': 3, 'name': 'shyam'}, {'age': 5, 'name': 'sita'}]
请参阅https://wiki.python.org/moin/HowTo/Sorting
关键参数非常强大,因为它可以处理要排序的各种数据,但可能不是很直观。