2024-04-20 10:51:03 发布
网友
我有一个列表,在循环查看数据时,我会在其中附加一个字典…我想按其中一个字典键进行排序。
例如:
data = "data from database" list = [] for x in data: dict = {'title':title, 'date': x.created_on} list.append(dict)
我想按“日期”的值对列表进行逆序排序
from operator import itemgetter your_list.sort(key=itemgetter('date'), reverse=True)
不要使用list,dict作为变量名,它们是Python中的内置名称。它使你的代码很难阅读。
list
dict
根据上下文的不同,您可能需要用tuple或^{}或自定义类似结构的类替换dictionary
tuple
from 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)
示例:
>>> 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)]
或者
>>> 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)]
以下是namedtuple的内部外观:
namedtuple
>>> 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))
你可以这样做:
list.sort(key=lambda item:item['date'], reverse=True)
直接对数据(或数据副本)排序,然后生成dict列表。使用与适当的键函数排序的函数进行排序(可能是operator.attrgetter)
相关注释
不要使用
list
,dict
作为变量名,它们是Python中的内置名称。它使你的代码很难阅读。根据上下文的不同,您可能需要用} 或自定义类似结构的类替换dictionary
tuple
或^{示例:
或者
以下是
namedtuple
的内部外观:你可以这样做:
直接对数据(或数据副本)排序,然后生成dict列表。使用与适当的键函数排序的函数进行排序(可能是operator.attrgetter)
相关问题 更多 >
编程相关推荐