3 回答

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊
dict如果您使用的是CPython 3.6+(或其他任何Python實(shí)現(xiàn)的Python 3.7+),則默認(rèn)情況下,標(biāo)準(zhǔn)Python會(huì)執(zhí)行此操作。
在舊版本的Python上,您可以使用collections.OrderedDict。

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
其他答案是正確的。這是不可能的,但是您可以自己編寫。但是,如果您不確定如何實(shí)際實(shí)現(xiàn)這樣的東西,這是一個(gè)完整且有效的實(shí)現(xiàn),該類將我剛剛編寫和測(cè)試的dict子類化。(請(qǐng)注意,傳遞給構(gòu)造函數(shù)的值的順序是不確定的,但是會(huì)在以后傳遞值之前出現(xiàn),并且您始終可以始終不允許使用值初始化有序的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')]

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
使用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
添加回答
舉報(bào)