我怎样才能从 namedtuple Python 中获得降序的 OrderedDict?

How could I get a descending OrderedDict from namedtuple, Python?

我知道 somenamedtuple._asdict() returns 升序 OrderedDict.

如何获得 降序 OrderedDict

您可以使用 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)])

反转它给你的东西:

>>> 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()):

并完全避免潜在的大型临时文件。

为了获得降序排列的字典,我们可以使用运算符包,这样会更容易。

例如:

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)

如果你想要最有效的内存方式,首先不要构造前向字典。那是一个不必要的中间人。

直接反转元组上的字段:

OrderedDict(zip(reversed(somenamedtuple._fields), reversed(somenamedtuple)))