簡體   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