2013-05-01 3 views
0

У меня есть словарь, как это:вставки словарей словаря в Python

dict1={'a':4,'d':2} 

У меня есть список словарей, как это:

diclist=[{'b':3,'c':3},{'e':1,'f':1}] 

Как выход, я хочу, чтобы dict1 быть как это:

dict1={'a':4,'b':3,'c':3,'d':2,'e':1,'f':1} 

так, мне нужно

  1. сравнить значения dict1 с значением diclist в
  2. если значение Dict в diclist меньше, чем один из dict1, вставьте Dict в dict1
  3. итерацию 2 в diclist

Это может быть Легко, однако, если вы готовы помочь в этом, мы будем очень благодарны.

ответ

1

Поскольку ваши ключи в вашем примере уникальны, как он отличается от простого слияния всех dicts?

dict1 = {'a': 4, 'd': 2} 
diclist = [{'b': 3, 'c': 3}, {'e': 1, 'f': 1}] 
for d in diclist: 
    dict1.update(d) 

Вот общий подход. Рассмотрим предоставление более полных примеров в будущем

>>> dict1={'a':4,'d':2} 
>>> diclist=[{'b':3,'c':3},{'e':1,'f':1}] 
>>> 
>>> for d in diclist: 
... for k, v in d.items(): 
... if k not in dict1 or v < dict1[k]: 
... dict1[k] = v 
... 
>>> dict1 
{'a': 4, 'c': 3, 'b': 3, 'e': 1, 'd': 2, 'f': 1} 
+0

Я думаю, что вам нужно реализовать стратегию объединения для решения _If значение в Словаре в diclist меньше, чем один из dict1, вставить Dict в dict1_ –

+0

Это кажется не требуется условие в пункте 2. – Johnsyweb

+0

@ hd1 Стратегии слияния необходимы для упорядоченных списков и коллекций (например, словари.) Пользователь указал, что он хотел для стратегии слияния в spec 2, когда происходят конфликты (тот же ключ между двумя слияющими словарями). –

0
for d in diclist: # iterate over the dicts 
    for k, v in d.items(): # iterate over the elements 
     v2 = dict1.set_default(k, v) # set the value if the key does not exist 
             # and return the value (existing or newly set) 
     if v < v2: # compare with the existing value and the new value 
      dict1[k] = v 

Это, вероятно, наиболее кратким и удобочитаемым.

0

Что-то вроде этого:

In [15]: dict1={'a':4,'d':2} 

In [16]: diclist=[{'b':3,'c':3},{'e':1,'f':1}] 

In [17]: for dic in diclist: 
    for key,value in dic.items(): 
     val=dict1.get(key,float("inf")) #fetch the value from dict1 if key is not found then return infinity 
     if value < val: 
      dict1[key] = value 

In [18]: dict1 
Out[18]: {'a': 4, 'b': 3, 'c': 3, 'd': 2, 'e': 1, 'f': 1} 
Смежные вопросы