繁体   English   中英

字典中FIFO顺序的pythonic方式

[英]pythonic way for FIFO order in Dictionary

我试图在python中填充一个字典,但我想保留密钥的顺序,因为它们进入 - 正如列表中的FIFO一样。

例如,

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

animal\tconservation_status\n
dog\tdomesticated\n
tiger\tEN\n
panda\tEN\n

也就是说,

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

在一个FIFO中应该是狗,老虎,熊猫出来......

当我将它读入字典时,订单将不会被保留。 我希望保留顺序,这样当我进行for循环时,FIRST IN是FIRST OUT。

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

有没有一个很好的方法来做到这一点,而不必保留外部索引或更复杂的字典结构? 不确定,抱歉我的天真......

是。 您使用collections.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')])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM