首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:扩展'dict‘类

Python:扩展'dict‘类
EN

Stack Overflow用户
提问于 2010-02-24 17:55:17
回答 3查看 42.7K关注 0票数 26

我必须解决这个问题:

Python的字典不保留插入数据的顺序,也不存储按键排序的数据。为dict类编写一个扩展,该类的实例将保持按键值排序的数据。注意,添加新元素时也必须保留顺序。

如何扩展dict?我需要访问dict类型的源代码吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-24 21:34:46

您可以是子类dict,也可以是UserDict,因为van已经谈到了UserDict,让我们看看dict

在解释器中键入help(dict),您将看到一大串方法。您需要覆盖所有修改dict的方法以及迭代dict的方法。

修改dict的方法包括__delitem____setitem__clear等。

迭代dict的方法包括__iter__keysvaluesitems等。

这应该能让你开始

代码语言:javascript
运行
复制
>>> 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]
票数 40
EN

Stack Overflow用户

发布于 2010-02-24 17:58:48

dict的实现无助于您完成这项任务。您需要的是一个类,它具有与dict相同的接口,但具有不同的实现。,等等。如果你在谷歌上搜索"ordereddict",你会发现很多例子。

票数 11
EN

Stack Overflow用户

发布于 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一起使用)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2328235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档