我正在尝试使用sorted
对dict列表进行排序
>>> 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
排序。这些方法的默认行为缺少什么?你知道吗
默认情况下,它将与找到的第一个差异进行比较。如果你在分类字典,这是相当危险的(一致但未定义)。你知道吗
将函数传递给
key=
参数,该参数从列表(在本例中是字典)中获取一个值,并返回要排序的值。你知道吗见https://wiki.python.org/moin/HowTo/Sorting
这个关键参数非常强大,因为它可以处理要排序的各种数据,尽管可能不是很直观。你知道吗
从一些old Python docs:
忽略默认行为,只提供一个
key
。你知道吗相关问题 更多 >
编程相关推荐