当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何从字典中按照插入的顺序检索项目?》经验,为你挑选了6个好方法。

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



1> dF...:

标准的python dict无法做到这一点.

有一个建议(PEP 372)将"有序字典"(跟踪插入顺序)添加到collections.OrderedDict标准库中的模块.它包含指向有序词典的各种 实现 的 链接(另请参阅Python Cookbook中的这两个配方).

如果您希望代码与"官方"版本兼容(如果最终接受提案),您可能希望坚持PEP中的参考实现.

编辑:PEP被接受并添加在python 2.7和3.1中.查看文档.



2> Eli Courtwri..:

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

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')]



3> 小智..:

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

只是好奇心问题:

from collections import OrderedDict
a = {}
b = OrderedDict()
c = OredredDict()

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



4> Brian McCutc..:

从Python 3.7开始,标准dict保留了插入顺序.来自文档:

在版本3.7中更改:字典顺序保证为插入顺序.这种行为是来自3.6的CPython的实现细节.

因此,您应该能够正常迭代字典或使用popitem().



5> Gerry..:

或者,只需使用time.now()作为元组中的第一个字段,使密钥成为元组.

然后你可以使用dictname.keys(),sort和voila检索密钥!

格里


这使得无法在不知道您何时插入它们的情况下查找字典中的条目.它并不比键值对列表更好.

6> Cody Brociou..:

您无法使用基本dict类执行此操作 - 它按哈希顺序排序.您可以构建自己的字典,它实际上是一个键,值对或某些列表,它们将被订购.


您的字典实现可以使用标准字典和列表 - 字典存储键 - >值关联,列表按插入顺序存储键.
推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有