字典中FIFO顺序的python方式



我正在尝试在python中填充字典,但我想保留键的顺序,因为它们进入-完全FIFO像列表一样会这样做。

例如,

我读取了一个名为animals.txt的文件,其中包含以下信息:

animaltconservation_statusn
dogtdomesticatedn
tigertENn
pandatENn

animals = {'dog':'dom','tiger':'EN', 'panda':'EN'}
>>> for el in animals:
...     print el
... 
tiger
dog
panda

在FIFO中应该是狗,老虎,熊猫,因为他们出来了…

当我把它读入字典时,顺序将不保留。我希望保持这样的顺序:当我执行for循环时,FIRST IN是FIRST OUT。

。狗,然后老虎,然后熊猫。

有没有一种很好的方法可以做到这一点,而不必保持外部索引或更复杂的字典结构?

是。你使用集合。OrderedDict而不是普通字典

>>> d = OrderedDict((x,x) for x in reversed(range(10)) )
>>> d
OrderedDict([(9, 9), (8, 8), (7, 7), (6, 6), (5, 5), (4, 4), (3, 3), (2, 2), (1, 1), (0, 0)])
>>> regular = dict((x,x) for x in reversed(range(10)))
>>> regular
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}

请注意,OrderedDict保留了顺序,而常规dict则没有。


>>> OrderedDict([('dog','dom'),('tiger','EN'), ('panda','EN')])
OrderedDict([('dog', 'dom'), ('tiger', 'EN'), ('panda', 'EN')])

另一个问题是,您需要以保持顺序的方式将项传递给构造函数(或.update)。换句话说,您不能将关键字args传递给构造函数并期望保持顺序:

>>> OrderedDict(dog='dom',tiger='EN',panda='EN')  #doesn't preserve order
OrderedDict([('tiger', 'EN'), ('panda', 'EN'), ('dog', 'dom')])

最新更新