2014-03-04 141 views
1

我想通過命令行發送字典密鑰。 sys.argv[1]有關鍵。 此密鑰存儲在var2併發送到append_func這是另一個文件附加。 動態每當我給密鑰的命令行參數,我想字典被附加。但其覆蓋每次當過我進入新的命令行參數在Python中更新一個字典與另一個字典

請看代碼:

##filename : dictionary.py## 

import sys 
import append 
dic={} 
var1=sys.argv[0] 
var2=sys.argv[1] 
dicto=append.append_fun(var2,dic) 
dic=dic.update(dicto) 
print dic 

##filename : append.py## 
def append_fun(var2,dic1): 
    dic1[var2] = "hello" 
    return dic1 

在命令行中我打電話dictionary.py test。再次當我打電話時,dictionary.py test1它不會附加dic這兩個值,它會覆蓋第二個。

請幫助我如何追加dic字典

+4

您期待什麼輸出?每次我 –

+0

我運行dictionary.py文件,如下所示: dictionary.py測試 dictionary.py test1的 我想輸出{你好測試:你好,TEST1}用不同的字符串運行dictionary.py。 例如:dictionary.py test1 dictionary.py test 輸出結果應該是:{test1:hello,test:hello} – user3378508

回答

2

你似乎想persistence,這樣您就可以撥打:

python dictionary.py test 

再後來再次執行:

python dictionary.py test1 

同時具有第一輪的結果仍然存在。但是第一次運行時無法保存數據,並且由於dic={}行每次初始化空字典時都會執行,因此目前無法像這樣工作。

爲了得到這個,你需要在某個地方保存狀態,比如臨時文件或數據庫。代碼dic={}不是,你的代碼必須在啓動時重新載入前一個狀態(當然,你還必須在退出前轉儲當前狀態)。

我建議看一下pickle,以獲取簡單和容易的將python對象序列化到磁盤。

+0

它沒有重複鍵.. – user3378508

+0

哦,對,你希望它在python文件的不同執行時是持久的嗎? – wim

+0

yes ..鍵將在運行時保持不變,並且值將相同。 因此我想字典得到更新 – user3378508

0

在python字典中是可變對象。因此,修改是「現場」完成的。所以你寫

dic.update(dicto) 

因爲update不返回任何東西。本着同樣的精神:

def append_fun(var2,dic1): 
    dic1[var2] = "hello" 

append.append_fun(var2,dic) 
+0

append_fun(var2,dic1)返回鍵值。但是在dictionary.py中,當我執行dic = dic.update(dicto)時。它不會追加到已存在的鍵值對中,它只有一個從append_fun返回的鍵值對 – user3378508

1

之前,我們得到解決你的問題,你應該利用這個代碼codereview.stackexchange.com。我很難理解爲什麼你首選

dicto=append.append_fun(var2,dic) 

dicto[var2] = "hello" 

如果我理解正確,你想,當你分配給它的是,一本字典,追加分配價值的任何其他可能已經存儲在該密鑰上的內容?如果是這樣,你會愛上collections.defaultdict。我希望。雖然它不會那麼做,但我認爲它能夠爲您提供他們想要的東西。

當您創建defaultdict時,您可以使用一個參數調用該類,該參數是一個在檢索缺席鍵時將被調用以創建新值的函數。由於list()返回試圖檢索任何鍵的空列表,將導致該鍵被創建並與通過調用默認對象函數(在對象實例化時作爲參數提供的那個)創建的值相關聯。我希望下面的交互式會話能夠解釋你需要知道的內容,但是如果沒有看到我鏈接的文檔。

>>> import collections 
>>> mydict = collections.defaultdict(list) 
>>> mydict['newkey'].append("Surprise!") # empty list invisibly created 
>>> mydict['newkey'] 
['Surprise!'] 
>>> mydict['newkey'].append("Surprise again!") 
>>> mydict['newkey'] 
['Surprise!', 'Surprise again!'] 
>>> mydict['no such key'] 
[] 
>>> list(mydict.keys()) 
['no such key', 'newkey'] 
>>> 

這有幫助,還是我一直在吠叫錯誤的樹?