sorting a list of dictionary values by date in python
我有一个列表,当我循环我的数据时,我在给它添加一个字典……我想按其中一个字典键排序。
前任:
1 2 3 4 5 | data ="data from database" list = [] for x in data: dict = {'title':title, 'date': x.created_on} list.append(dict) |
我想按"日期"值的相反顺序对列表进行排序
你可以这样做:
1 | list.sort(key=lambda item:item['date'], reverse=True) |
1 2 3 | from operator import itemgetter your_list.sort(key=itemgetter('date'), reverse=True) |
号相关说明
不要使用
list 和dict 作为变量名,它们是python中内置的名称。这会使代码难以读取。根据上下文,您可能需要用
tuple 或collections.namedtuple 或自定义结构类替换字典。1
2
3
4
5
6from collections import namedtuple
from operator import itemgetter
Row = namedtuple('Row', 'title date')
rows = [Row(row.title, row.created_on) for row in data]
rows.sort(key=itemgetter(1), reverse=True)
例子:
1 2 3 4 | >>> lst = [Row('a', 1), Row('b', 2)] >>> lst.sort(key=itemgetter(1), reverse=True) >>> lst [Row(title='b', date=2), Row(title='a', date=1)] |
。
或
1 2 3 4 5 | >>> from operator import attrgetter >>> lst = [Row('a', 1), Row('b', 2)] >>> lst.sort(key=attrgetter('date'), reverse=True) >>> lst [Row(title='b', date=2), Row(title='a', date=1)] |
下面是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | >>> Row = namedtuple('Row', 'title date', verbose=True) class Row(tuple): 'Row(title, date)' __slots__ = () _fields = ('title', 'date') def __new__(cls, title, date): return tuple.__new__(cls, (title, date)) @classmethod def _make(cls, iterable, new=tuple.__new__, len=len): 'Make a new Row object from a sequence or iterable' result = new(cls, iterable) if len(result) != 2: raise TypeError('Expected 2 arguments, got %d' % len(result)) return result def __repr__(self): return 'Row(title=%r, date=%r)' % self def _asdict(t): 'Return a new dict which maps field names to their values' return {'title': t[0], 'date': t[1]} def _replace(self, **kwds): 'Return a new Row object replacing specified fields with new values' result = self._make(map(kwds.pop, ('title', 'date'), self)) if kwds: raise ValueError('Got unexpected field names: %r' % kwds.keys()) return result def __getnewargs__(self): return tuple(self) title = property(itemgetter(0)) date = property(itemgetter(1)) |
。
我昨天确实有一个几乎完全准确的问题,并通过搜索解决了它。适用于您的问题的最佳答案是:
1 2 | from operator import itemgetter list.sort(key=itemgetter('date'), reverse=True) |
如果你喜欢简洁的东西:
1 2 3 4 5 | data ="data from database" sorted_data = sorted( [{'title': x.title, 'date': x.created_on} for x in data], key=operator.itemgetter('date'), reverse=True) |
。
直接对数据(或数据副本)进行排序,然后构建听写列表。使用用适当键函数排序的函数进行排序(可能是operator.attrgetter)