【发布时间】:2017-04-19 00:03:03
【问题描述】:
目标
在排序时覆盖从OrderedDict 继承的类的排序。
说明
我有一个继承自 OrderedDict 的类。
从OrderedDict 文档中可以清楚地看出,可以通过在键值元组的排序列表上初始化一个新的OrderedDict:
OrderedDict(sorted(my_ordered_dict, key=lambda item: item[1]))
这很漂亮,但是因为OrderedDict会记住插入顺序甚至当一个键被覆盖时,人们可以不简单地添加方法:
def sort_by_value(self):
self = OrderedDict(sorted(my_ordered_dict, key=lambda item: item[1]))
改变原来OrderedDict的顺序。
文档还建议:
def __setitem__(self, key, value):
if key in self:
del self[key]
OrderedDict.__setitem__(self, key, value)
for ''一个有序的字典变体,它记住最后插入键的顺序。'' 这并不理想,但会产生所需的行为。
我已经创建了一个虚拟课程来尝试这个想法。但是它不起作用。排序后如何覆盖OrderedDict 的排序?
虚拟类
from collections import OrderedDict
class DumbDictionary(OrderedDict):
def __init__(self, *args, **kwargs):
super(DumbDictionary, self).__init__(*args, **kwargs)
def __setitem__(self, key, value):
if key in self:
del self[key]
DumbDictionary.__setitem__(self, key, value)
def sort_by_value(self):
self = DumbDictionary(sorted(self.items(), key=lambda item: item[1]))
【问题讨论】:
标签: python sorting dictionary ordereddictionary