我怎样才能从 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)))
我知道 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)))