我知道somenamedtuple._asdict()
会返回升序 OrderedDict
。
如何获得降序 OrderedDict
?
答案 0 :(得分:4)
如果您想要最有效的内存方式,请不要首先构造前向字典。那是一个不必要的中间人。
直接反转元组上的字段:
OrderedDict(zip(reversed(somenamedtuple._fields), reversed(somenamedtuple)))
答案 1 :(得分:2)
您可以使用reversed()
从namedtuple获取反向的OrderedDict,如:
OrderedDict(reversed(list(x._asdict().items())))
from collections import namedtuple, OrderedDict
MyTuple = namedtuple('MyTuple', 'f1 f2')
x = MyTuple(1, 2)
print(OrderedDict(reversed(list(x._asdict().items()))))
OrderedDict([('f2', 2), ('f1', 1)])
答案 2 :(得分:2)
反转它给你的东西:
>>> from collections import namedtuple, OrderedDict
>>> Foo = namedtuple('Foo', ['a', 'b', 'c'])
>>> Foo(1, 2, 3)._asdict()
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
>>> OrderedDict(reversed(Foo(1, 2, 3)._asdict().items()))
OrderedDict([('c', 3), ('b', 2), ('a', 1)])
如果您只需要按相反的顺序迭代它,而不是实际创建一个新的OrderedDict
,您可以这样做:
for k, v in reversed(somenamedtuple._asdict().items()):
并完全避免潜在的大临时。
答案 3 :(得分:-1)
为了得到一个降序的字典,我们可以使用操作包来完成工作。
例如:
import operator
d = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
print('Original dictionary : ',d)
sorted_d = sorted(d.items(), key=operator.itemgetter(0))
print('Dictionary in ascending order by value : ',sorted_d)
sorted_d = sorted(d.items(),
key=operator.itemgetter(0),reverse=True)
print('Dictionary in descending order by value : ',sorted_d)