3

我有一个对象字典,其中键是简单的字符串,值是具有一些属性的数据对象。我想根据字典值中的属性对字典进行排序。我用它来根据字典值进行排序

sorted = dict.values()
sorted.sort(key = operator.attrgetter('total'), reverse=True)

这会产生一个排序的值列表(这是预期的),并且我从字典中丢失了我的原始键(自然)。我想将键和值一起排序......我怎样才能做到这一点?任何帮助将不胜感激?

4

3 回答 3

11

使用.items()(或其迭代器版本iteritems)而不是.values()获取(key, value)元组列表。

items = sorted(dct.iteritems(), key=lambda x: x[1].total, reverse=True)
于 2012-05-24T18:25:28.067 回答
1

使用items而不是values- 并且只使用 lambda 来影响排序键本身,因为不会有现成operator 的:

sorted = dict.items()
sorted.sort(key = lambda item: item[1].total, reverse=True)
于 2012-05-24T18:26:39.850 回答
1

你会想使用.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(...)]来获取值。

于 2012-05-24T18:26:43.337 回答