我有这个清单:
L = [{'status': 1, 'country': 'France'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'usa'}]
如何按country
(或按status
)元素、ASC/DESC 对该列表进行排序。
用于list.sort()
对列表进行就地排序或sorted
获取新列表:
>>> L = [{'status': 1, 'country': 'France'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'usa'}]
>>> L.sort(key= lambda x:x['country'])
>>> L
[{'status': 1, 'country': 'France'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'usa'}]
您可以将可选的关键字参数reverse = True
传递给sort
并按sorted
降序排序。
由于大写字母被认为小于其相应的小写版本(由于它们的 ASCII 值),因此您可能也必须使用str.lower
。
>>> L.sort(key= lambda x:x['country'].lower())
>>> L
[{'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'France'}, {'status': 1, 'country': 'usa'}]
>>> from operator import itemgetter
>>> L = [{'status': 1, 'country': 'France'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'usa'}]
>>> sorted(L, key=itemgetter('country'))
[{'status': 1, 'country': 'France'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'usa'}]
>>> sorted(L, key=itemgetter('country'), reverse=True)
[{'status': 1, 'country': 'usa'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'France'}]
>>> sorted(L, key=itemgetter('status'))
[{'status': 1, 'country': 'France'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'usa'}]
对于真正的代码来说,将密钥拉出一个命名函数是一个好主意,因为现在您可以显式地为它编写测试
def by_country(x):
# For case insensitive ordering by country
return x['country'].lower()
L.sort(key=by_country)
当然你可以适应使用sorted(L, key=...)
等等reverse=True
。