我如何从namedtuple,Python获得降序的OrderedDict?

时间:2018-04-04 03:28:56

标签: python python-3.x namedtuple

我知道somenamedtuple._asdict()会返回升序 OrderedDict

如何获得降序 OrderedDict

4 个答案:

答案 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)