2015-06-24 3 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).

Что является самым простым/самым элегантным способом управления обновлением данного дубликата ключа? Например, не добавляйте новый ключ/значение, если ключ уже присутствует, или не обновляете значение ключа, если значение, которое нужно обновить, больше, чем тот, который уже указан в dict, который я обновляю?

+0

Ну, что вы хотите, чтобы результат был, когда есть дубликаты ключей? - Какое требование? - что ожидает остальная часть кода? – wwii

+0

@wwii остальная часть кода ожидает, что результатом будет один словарь без дубликатов ключей. Если я не понимаю ваш вопрос, я уже указал, что может произойти (например, не добавляйте новый ключ/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: Этот код не распространяется на случай, когда val не содержит номера (или что-нибудь, что может быть float -ed). Вы не указали, как бы вы хотели, чтобы этот случай вел себя так, чтобы это просто игнорировало это.

0

Вы могли бы просто добавить оба ключа и значения в один словарь. dictTwo = {'incomeOne': 10000, 'incomeTwo': 6000 и т. Д.}, Затем вытащите их соответствующим образом.