我有一个对象字典,其中键是简单的字符串,值是具有一些属性的数据对象。我想根据字典值中的属性对字典进行排序。我用它来根据字典值进行排序
sorted = dict.values()
sorted.sort(key = operator.attrgetter('total'), reverse=True)
这会产生一个排序的值列表(这是预期的),并且我从字典中丢失了我的原始键(自然)。我想将键和值一起排序......我怎样才能做到这一点?任何帮助将不胜感激?
我有一个对象字典,其中键是简单的字符串,值是具有一些属性的数据对象。我想根据字典值中的属性对字典进行排序。我用它来根据字典值进行排序
sorted = dict.values()
sorted.sort(key = operator.attrgetter('total'), reverse=True)
这会产生一个排序的值列表(这是预期的),并且我从字典中丢失了我的原始键(自然)。我想将键和值一起排序......我怎样才能做到这一点?任何帮助将不胜感激?
使用.items()
(或其迭代器版本iteritems
)而不是.values()
获取(key, value)
元组列表。
items = sorted(dct.iteritems(), key=lambda x: x[1].total, reverse=True)
使用items
而不是values
- 并且只使用 lambda 来影响排序键本身,因为不会有现成operator
的:
sorted = dict.items()
sorted.sort(key = lambda item: item[1].total, reverse=True)
你会想使用.items()
而不是.values()
,例如:
def keyFromItem(func):
return lambda item: func(*item)
sorted(
dict.items(),
key=keyFromItem( lambda k,v: (v['total'], k) )
)
以上将首先根据总数排序,对于总数相等的项目,将按字母顺序对它们进行排序。它将(key,value)
成对返回项目,您可以这样做[x[1] for x in sorted(...)]
来获取值。