2013-02-14 76 views
1

我有一個名爲dictdict字典的字典,它看起來像:的Python轉換字典中的值列出,並附加項目

dictdict = { 'key1': {'subkey1': 4, 'subkey2': 7}, 
      'key2': {'subkey1': 6, 'subkey2': 8} } 

...等等。 dictdict有幾十個鍵,每個鍵有幾十個子鍵,每個子鍵對應一個整數值。

我想追加一個列表到每個單獨的值,保持已經存在的值作爲我的新值列表中的第一項。因此,期望的結果將具有與以前相同的詞典結構字典,除了替代對應於單個整數的子鍵,它們將對應於包含整數和字符串的列表(因此包含我的原始值的列表作爲第一項由各種整數和字符串)。

我想要的東西,看起來落得像:

dictdict = { 'key1': {'subkey1': [4, 'apple', 37], 
         'subkey2': [7, 'orange', 19]}, 
      'key2': {'subkey1': [6, 'kiwi', 76], 
         'subkey2': [8, 'banana', 29]} } 

當我嘗試這個...

#convert each nested value into a one item list 
for key in dictdict: 
    for subkey in dictdict[key]: 
     dictdict[key][subkey] = [dictdict[key][subkey]] 

#now that our values are lists, append some items to the list 
dictdict["key1"]["subkey1"].append('a1', a2) 

...它幾乎工作,因爲我可以追加一個列表每個值(hooray!),但每個列表中的第一個項目(我的原始值)現在是它自己的一個項目列表(oops!)。

所以我最終

dictdict[key1][subkey1] 

與此對應

[[4], 'a1', a2] 

,但我想它對應於這個

[4, 'a1', a2] 

而且,它可能去瓦特/輸出說,但我是一個新手。

+0

你的代碼幾乎適用於我。將單個值轉換爲列表的循環,至少可以完美工作。 'append'調用很麻煩。你確定你沒有錯誤地運行循環兩次嗎? – Blckknght 2013-02-14 03:34:09

+1

'.append'只需一個參數 – wim 2013-02-14 03:39:08

+1

嘗試'dictdict [「key1」] [「subkey1」] + = ['a1','a2']' – 2013-02-14 03:45:16

回答

4
>>> dictdict = { 'key1': {'subkey1': 4, 'subkey2': 7}, 'key2': {'subkey1': 6, 'subkey2': 8} } 
>>> dictdict["key1"]["subkey1"] 
4 
>>> for v1 in dictdict.values(): 
...  v1.update((k,[v]) for k,v in v1.iteritems()) 
... 
>>> dictdict["key1"]["subkey1"] += ['a1', 'a2'] 
>>> dictdict["key1"]["subkey1"] 
[4, 'a1', 'a2'] 
>>> 
+0

這解決了我的問題。沒有更多不想要的單個項目列表作爲我想要的列表中的第一個項目。謝謝@gnibbler – 2013-02-14 15:56:29

0

您可以使用字典理解,就像這樣:

dictdict = {k:{kk:[vv] for (kk, vv) in v.iteritems()} for (k, v) in dictdict.iteritems()} 

例如,如果這是你最初的字典:

>>> dictdict 
{'a': {'mm': 4}, 'b': {'qq': 6}} 

那麼結果將是:

>>> dictdict = {k:{kk:[vv] for (kk, vv) in v.iteritems()} for (k, v) in dictdict.iteritems()} 
>>> dictdict 
{'a': {'mm': [4]}, 'b': {'qq': [6]}} 

這使您可以將項目追加到嵌套列表中。如果您要附加另一個列表,您可以使用+=extend(),如果您一次追加單個元素,則使用append()

+0

本答案和其他解釋的編輯有助於進一步理解的字典,對python和編程一般都是新手。我選擇了@gnibbler答案,因爲語法對我來說更容易理解。不過謝謝。 – 2013-02-14 15:49:53

相關問題