首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何按照条目的插入顺序从字典中检索条目?

如何按照条目的插入顺序从字典中检索条目?
EN

Stack Overflow用户
提问于 2008-09-13 20:38:05
回答 10查看 46.8K关注 0票数 65

是否可以按照插入的顺序从Python字典中检索条目?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2008-09-13 20:48:36

如果您使用的是CPython dict (对于Python的任何其他实现,则为Python 3.6+或Python 3.7+ ),则默认情况下,标准Python 3.6+会执行此操作。

在较旧版本的Python中,您可以使用collections.OrderedDict

票数 67
EN

Stack Overflow用户

发布于 2014-10-30 01:42:26

使用OrderedDict(),从2.7版开始提供

只是出于好奇心:

代码语言:javascript
运行
复制
from collections import OrderedDict
a = {}
b = OrderedDict()
c = OrderedDict()

a['key1'] = 'value1'
a['key2'] = 'value2'

b['key1'] = 'value1'
b['key2'] = 'value2'

c['key2'] = 'value2'
c['key1'] = 'value1'

print a == b  # True
print a == c  # True
print b == c  # False
票数 18
EN

Stack Overflow用户

发布于 2008-09-14 00:58:30

其他答案是正确的;这是不可能的,但你可以自己写。但是,如果您不确定如何实际实现这样的东西,这里有一个完整的、有效的实现,它是我刚刚编写和测试的子类dict。(请注意,传递给构造函数的值的顺序是未定义的,但将在稍后传递的值之前出现,并且您可以始终不允许使用值初始化有序的字典。)

代码语言:javascript
运行
复制
class ordered_dict(dict):
    def __init__(self, *args, **kwargs):
        dict.__init__(self, *args, **kwargs)
        self._order = self.keys()

    def __setitem__(self, key, value):
        dict.__setitem__(self, key, value)
        if key in self._order:
            self._order.remove(key)
        self._order.append(key)

    def __delitem__(self, key):
        dict.__delitem__(self, key)
        self._order.remove(key)

    def order(self):
        return self._order[:]

    def ordered_items(self):
        return [(key,self[key]) for key in self._order]


od = ordered_dict()
od["hello"] = "world"
od["goodbye"] = "cruel world"
print od.order()            # prints ['hello', 'goodbye']

del od["hello"]
od["monty"] = "python"
print od.order()            # prints ['goodbye', 'monty']

od["hello"] = "kitty"
print od.order()            # prints ['goodbye', 'monty', 'hello']

print od.ordered_items()
# prints [('goodbye','cruel world'), ('monty','python'), ('hello','kitty')]
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60848

复制
相关文章

相似问题

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