簡體   English   中英

有序字典,保留初始訂單

[英]Ordered Dict, preserve initial Order

有序字典:

import collections
d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
collections.OrderedDict(sorted(d.items(), key=lambda t: t[0]))

上面的示例顯示了如何訂購自然不受支持的字典。 但是,如何保留初始順序,而不是按鍵或值排序?

最初的順序保存為OrderedDict ,所以只是把它直並繞過正常的字典:

>>> from collections import OrderedDict
>>> od = OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])
>>> od
OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])

用商品初始化常規字典后,訂單就消失了。 因此,只需按初始順序初始化有序字典即可:

import collections as co

co.OrderedDict([(a, b) for a, b in list_of_pairs])
# or
d = co.OrderedDict()
for a, b in list_of_pairs:
    d[a] = b

在定義時,常規dict已經沒有命令。 dict sort實際上不是對dict排序,而是對包含(key, value)對的tupleslist排序。

d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
s = sorted(d.items(), key=lambda t: t[0])
>>>s
[('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]

這是tuples sorted列表。 key = lambda t: t[0]返回tuple 2nd元素。因此,基於tuple 2nd元素進行排序

new_d = dict(s)
>>>new_d.items()
[('orange', 2), ('pear', 1), ('apple', 4), ('banana', 3)]

那就是訂單消失。為了維護訂單,使用了OrderedDict

例如

>>>OrderedDict({"a":5})
OrderedDict([('a', 5)])

這也在維護list of tuples

所以你必須pass一個排序list of tuple

>>>OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])
OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM