我必须解决这个问题:
Python的字典不保留插入数据的顺序,也不存储按键排序的数据。为dict类编写一个扩展,该类的实例将保持按键值排序的数据。注意,添加新元素时也必须保留顺序。
如何扩展dict
?我需要访问dict
类型的源代码吗?
发布于 2010-02-24 21:34:46
您可以是子类dict
,也可以是UserDict
,因为van已经谈到了UserDict,让我们看看dict
。
在解释器中键入help(dict)
,您将看到一大串方法。您需要覆盖所有修改dict的方法以及迭代dict的方法。
修改dict的方法包括__delitem__
、__setitem__
、clear
等。
迭代dict的方法包括__iter__
、keys
、values
、items
等。
这应该能让你开始
>>> class odict(dict):
... def __init__(self, *args, **kw):
... super(odict,self).__init__(*args, **kw)
... self.itemlist = super(odict,self).keys()
... def __setitem__(self, key, value):
... # TODO: what should happen to the order if
... # the key is already in the dict
... self.itemlist.append(key)
... super(odict,self).__setitem__(key, value)
... def __iter__(self):
... return iter(self.itemlist)
... def keys(self):
... return self.itemlist
... def values(self):
... return [self[key] for key in self]
... def itervalues(self):
... return (self[key] for key in self)
...
>>> od = odict(a=1,b=2)
>>> print od
{'a': 1, 'b': 2}
>>> od['d']=4
>>> od['c']=3
>>> print od # look at the `__str__` and `__repr__` methods
{'a': 1, 'c': 3, 'b': 2, 'd': 4}
>>> print od.keys()
['a', 'b', 'd', 'c']
>>> print od.values()
[1, 2, 4, 3]
发布于 2010-02-24 17:58:48
dict的实现无助于您完成这项任务。您需要的是一个类,它具有与dict
相同的接口,但具有不同的实现。,等等。如果你在谷歌上搜索"ordereddict",你会发现很多例子。
发布于 2010-02-24 17:59:19
如果您使用python 2.7+,那么请参阅collections.OrderedDict。
否则,使用backport (复制源)或查看食谱576693: Py2.4有序字典(Python)。
但是,如果您确实需要扩展dict
,那么从UserDict开始,您可以在python发行版的/lib/UserDict.py
中找到它的源代码(Lib/collections/__init__.py
与Python3一起使用)。
https://stackoverflow.com/questions/2328235
复制相似问题