我将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
答案 0 :(得分:3)
您正在对类似于(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'))