Вопрос по list, python – Обновление списка словарей Python с помощью пары ключ-значение из другого списка

12

Допустим, у меня есть следующий список словаря Python:

dict1 = [{'domain':'Ratios'},{'domain':'Geometry'}]

и список как:

list1 = [3, 6]

Я хочу обновитьdict1 или создайте другой список следующим образом:

dict1 = [{'domain':'Ratios', 'count':3}, {'domain':'Geometry', 'count':6}]

Как бы я это сделал?

В соответствии с примером заголовок этого вопроса должен быть следующим: «Обновление списка значений словарей python из другого списка». От текущего заголовка я ожидаю, что list1 = [('Ratios', 3), ('Geometry', 6)] yucer

Ваш Ответ

4   ответа
3

Ты можешь это сделать

# list index
l_index=0

# iterate over all dictionary objects in dict1 list
for d in dict1:

    # add a field "count" to each dictionary object with
    # the appropriate value from the list
    d["count"]=list1[l_index]

    # increase list index by one
    l_index+=1

Это решение не создает новый список. Вместо этого он обновляет существующийdict1 список.

Очень многословно для Python, но все объясняет очень хорошо. jamylak
Да, у тебя есть право! Это очень многословно. Но поскольку здесь есть и другие ответы, менее подробные, я думаю, что было бы неплохо добавить более объяснительное решение .. Thanasis Petsas
Спасибо за подробное объяснение. Harshil Parikh
22
>>> l1 = [{'domain':'Ratios'},{'domain':'Geometry'}]
>>> l2 = [3, 6]
>>> for d,num in zip(l1,l2):
        d['count'] = num


>>> l1
[{'count': 3, 'domain': 'Ratios'}, {'count': 6, 'domain': 'Geometry'}]

на этот раз со списком, который не изменяет оригинал:

>>> [dict(d, count=n) for d, n in zip(l1, l2)]
[{'count': 3, 'domain': 'Ratios'}, {'count': 6, 'domain': 'Geometry'}]
что быстрее в вычислительном отношении? amc
@ amc Вероятно, об этом не стоит беспокоиться: P Но можно запуститьtimeit на это jamylak
Благодарность. Второе решение выдает ошибку в текущей форм Harshil Parikh
Вы используете Python 3? Я, вероятно, поменяю его на перекрестную совместимость. jamylak
Теперь он работает и в Python 3, если это было вашей проблемой:) jamylak
6

Ты мог бы сделать это:

for i, d in enumerate(dict1):
    d['count'] = list1[i]
0

Использование понимания списка будет питонским способом сделать это.

[data.update({'count': list1[index]}) for index, data in enumerate(dict1)]

Thedict1 будет обновлено с соответствующим значением изlist1.

-1 Использование списка для мутаций - этон питонический. Используйте простой цикл for. jamylak
Update на продиктованную работу по ссылке не обеспечивают вывод. data.update () возвращает None. Вы выйдете из игры как [Нет, Нет, ....] Manoj Sahu

Похожие вопросы