2015-06-24 48 views
0

我正在合併一組字典,其中兩個可能包含相同的密鑰但不同的值。目前,我簡單的代碼看起來是這樣的:使用相同的密鑰控制字典更新

dictOne = {'income': 10000, 'name': 'John'} 
dictTwo = {'income': 6000, 'job': 'plumber'} 
resultsDict = {} 
myList = [dictOne, dictTwo] 
for i in myList: 
    resultsDict.update(i) 

收入關鍵在resultsDict值將永遠是任何的值在最近添加的字典,其中相同的密鑰存在(在這種情況下,將6000)。

什麼是最簡單/最優雅的方式來控制給定重複鍵的更新?例如,如果密鑰已存在,請不要添加新的密鑰/值,或者如果要更新的值大於我正在更新的字典中已有的值,請不要更新密鑰的值?

+0

那麼,當重複鍵時你想要結果是什麼? - 要求是什麼? - 代碼的其餘部分會期待什麼? – wwii

+0

@wwii其餘的代碼將期望結果是一個沒有重複鍵的單個字典。除非我誤解了你的問題,否則我已經指定了可能發生的事情(例如,不要添加新的key/val,或者只更新新的val,如果它大於現有的val) – AutomaticStatic

+0

你要求我們告訴你它是什麼時候在合併詞典時更正/更改重複鍵的值。我們不知道,您的計劃的要求將確定。有關係嗎?如果您隨機更新重複鍵值,是否會影響程序結果? – wwii

回答

1

我相信你有實際遍歷所有的字典單獨,檢查重點是存在的,當它不存在,或者當它不過是比新值,更新適當

for currDict in myList: 

    for key, val in currDict.items(): 

     try: 
      val = float(val) 
     except ValueError: 
      continue 

     try: 
      if resultsDict[key] < val: 
       resultsDict[key] = val 
     except KeyError: 
      resultsDict[key] = val 

注意:我改變i命名爲可讀性

UPDATE:這個代碼不涵蓋可float -ed時val不包含數字的情況下(或任何)。你沒有指定你希望這種情況的行爲,所以這只是簡單地忽略它

0

你可以只添加鍵和值到一個字典。 dictTwo = {'incomeOne':10000,'incomeTwo':6000等} ...然後相應地拉出來。

相關問題