2017-02-16 6 views
0

У меня есть список словарей с идентичными ключами. Некоторые ключи имеют целочисленные значения, некоторые имеют строковые значения, а один ключ имеет заданное значение для первого словаря и Нет для всех остальных словарей.Обновление значений из определенного ключа в списке словарей на основе отдельного списка

Пример первого словаря в списке словарей можно найти здесь:

dicts = [{'foul': 1, 'lineup': set(['Player 1', 'Player 2']), 'Date': '11/12/2016}... 

Пример второго и третьего словаря в списке словарей:

...{'foul': 6, 'lineup': None, 'Date': '11/19/2016}, {'foul': 12, 'lineup': None, 'Date': '11/22/2016}] 

Ниже приведен пример списка значений, которые я хочу использовать для обновления этих трех словарей:

listofvals = [set('Player 4', 'Player 2'), set('Player 2', 'Player 3'), set('Player 6', 'Player 1')] 

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

Такое, что список словарей возвращается следующим образом:

desired_product = 
[{'foul': 1, 'lineup': set(['Player 4', 'Player 2']), 'Day': '11/12/2016}, 
{'foul': 6, 'lineup': set(['Player 2', 'Player 3']), 'Day': '11/19/2016}, 
{'foul': 12, 'lineup': set(['Player 6', 'Player 1']), 'Day': '11/22/2016}] 

Я попытался вариации на следующем:

for index, d in enumerate(dicts): 
    stnt.update((k, listofvals[idx]) for k, v in stnt.iteritems() if v == None or type(v) == 'set') 

Другая вещь, которую я пробовал:

for index, d in enumerate(dicts): 
    for key, val in d.interitems(): 
     setattr(d["lineup"], key, listofvals[idx]) 

ответ

1
for index,d in enumerate(dicts): 
    d["lineup"] = listofvals[index] 
+0

Первый дает следующую ошибку: TypeError : объект 'set' не поддерживает индексирование – BSHuniversity

+0

Второй возвращает только одного игрока из списка vals. – BSHuniversity

+0

Больше предложений здесь? – BSHuniversity