मुझे पता है कि somenamedtuple._asdict() एक आरोही OrderedDict लौटाता है।

मैं अवरोही OrderedDict कैसे प्राप्त करूं?

1
HIPPO LD 4 अप्रैल 2018, 06:28

2 जवाब

सबसे बढ़िया उत्तर

यदि आप सबसे अधिक मेमोरी कुशल तरीका चाहते हैं, तो पहले स्थान पर आगे के निर्देश का निर्माण न करें। यह एक अनावश्यक बिचौलिया है।

सीधे टुपल पर फ़ील्ड को उल्टा करें:

OrderedDict(zip(reversed(somenamedtuple._fields), reversed(somenamedtuple)))
4
wim 4 अप्रैल 2018, 03:42

यह आपको जो देता है उसे उलट दें:

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

और संभावित रूप से बड़े अस्थायी रूप से पूरी तरह से बचें।

2
wim 4 अप्रैल 2018, 03:36