我将namedtuple作为值存储在字典中,如下所示

AssetList = {}
Asset = namedtuple('Asset_Desc', 'value weight value_per_unit')
for i in range(0,items):
    AssetList[i] = Asset(values[i], weights[i], values[i]/weights[i])
print AssetList


我想根据“ value_per_unit”对字典进行排序,因此我写了如下内容。但是我想知道“钥匙”应该是什么?我尝试了itemgetter和attrgetter,但似乎索引有误,我不知道如何引用Asset.value_per_unit。任何的想法?

Sorted_AssetList = sorted(AssetList.iteritems(), key=???)
print Sorted_AssetList

最佳答案

您正在对看起来像(1, asset)的键值元组进行排序,因此可以使用以下函数:

..., key=lambda pair: pair[1].value_per_unit)


而且,这似乎不是字典的好用处。我会改用一个列表:

Asset = namedtuple('Asset_Desc', 'value weight value_per_unit')

assets = []

for i in range(items):
    assets.append(Asset(values[i], weights[i], values[i]/weights[i]))


如果确实需要索引,请对enumerate()的结果进行排序:

sorted_assets = sorted(enumerate(assets), key=lambda pair: pair[1].value_per_unit)


否则,您可以使用attrgetter

from operator import attrgetter

sorted_assets = sorted(assets, key=attrgetter('value_per_unit'))

10-05 23:29