是否有可能检索项目从Python字典中的顺序插入?

有帮助吗?

解决方案

标准的蟒蛇 dict 这不会默认情况下如果您使用的CPython3.6+(或Python3.7对于任何其他执行Python).

在旧版本的蟒蛇可以使用 collections.OrderedDict.

其他提示

其他的答案是正确的;这是不可能的,但你可以写你自己。但是,如果你不确定实际上如何实现这样的事情,这里是一个完整的工作和执行这类dict我刚刚写和测试。(注意,值的顺序通过的构造不确定但会之前的价值观传给后,你总是可以只是不允许下令字典进行初始化与价值观。)

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

使用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

或者,只是使关键元组的时间。now()作为第一个领域中的元组。

然后你可以检索的钥匙dictname.钥匙()、排序,瞧!

格里

作为Python3.7,标准字典中保留插入序。从 文档:

改变在3.7版:词典以保证是插入序。这种行为是执行详细的CPython从3.6.

所以,你应该可以迭代过字典中的通常或使用 popitem().

你不能这样做的基dict类-这是命令通过散列。你可以建立自己的字典,真的是一个列表中的关键,值对或somesuch,这将是有序的。

我用StableDict之前有很好的成功。

http://pypi.python.org/pypi/StableDict/0.2

或者使用任何实现的 PEP-372 描述 在这里,, 像的 odict模块pythonutils.

我成功地使用的pocoo.org 执行,它是作为容易,因为替换你

my_dict={}
my_dict["foo"]="bar"

my_dict=odict.odict()
my_dict["foo"]="bar"

和需要的只是 这个文件

这是不可能的,除非你在商店的钥匙在一个单独的名单中引用之后。

什么你能做的就是插入的价值的一个关键代表以输入,然后调 sorted() 在该项目。

>>> obj = {}
>>> obj[1] = 'Bob'
>>> obj[2] = 'Sally'
>>> obj[3] = 'Joe'
>>> for k, v in sorted(obj.items()):
...     print v
... 
Bob
Sally
Joe
>>> 

如果你不需要dict功能,只需要回元组在为你已经插入他们,不是一个队的工作更好吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top