2016-09-24 28 views
1

我讀過OrderedDict可以用來保持字典順序的信息,但它似乎要求您輸入信息,同時實例化字典本身。如何確保更新()添加到字典結尾

但是,我需要能夠在for循環中多次使用update(),並確保每個條目都被添加到字典的尾端。有沒有辦法做到這一點?

這裏是一個可視化我在說什麼的約

for e in entryList: 
    myDict.update({e[2]: e[3]}) 

這將把所有的新信息,但不把它放在秩序。

+0

'append()'for OrderedDict?你確定有嗎? –

+0

因此,我建議再次從這篇文章的建議:http://stackoverflow.com/questions/13239279/is-it-possible-to-add-key-value-pair-at-the-end-of-該詞典功能於蟒蛇 – Chichi

回答

3

根據文檔(https://docs.python.org/2/library/collections.html#collections.OrderedDict),您必須在添加條目之前刪除條目。

您可以在子類中包裝這個爲了方便..:

class MyOrderedDict(OrderedDict): 
    def update(self, other): 
     for k, v in other.items(): 
      if k in self: 
       del self[k] 
      self[k] = v 

我覺得奇怪,使用更新你這樣做雖然方式:

myDict.update({e[2]: e[3]}) 

,因爲它會更清楚寫:

myDict[e[2]] = e[3] 

爲了使這項工作,你還需要覆蓋__setitem__

class MyOrderedDict(OrderedDict): 
    def __setitem__(self, key, val): 
     if key in self: 
      del self[key] 
     super(self, MyOrderedDict).__setitem__(key, val) 

    def update(self, other): 
     for k, v in other.items(): 
      self[k] = v 
0

@Bob,請參考這裏的文檔。 https://docs.python.org/3.5/library/collections.html?highlight=ordereddict#collections.OrderedDict

它說:

的OrderedDict構造和update()方法都接受關鍵字 爭論,但他們的訂單丟失,因爲Python的函數調用 語義關鍵字參數使用普通無序 詞典通過。

然而,有3.2增加了一個解決辦法:(來自同一頁)

move_to_end(鍵,最後= TRUE)將現有的密鑰到 有序字典的任一端。如果最後一個爲真 (默認),則該項目移動到右端,如果最後一個爲假,則將項目移動到開頭。如果 鍵不存在,則引發KeyError。

我希望能回答這個問題。