#python #dictionary #if-statement
#python #словарь #if-оператор
Вопрос:
Я пытаюсь обновить словари в списке nodes
кортежами в другом списке source
с помощью условного.
Список кортежей:
source = [('144 IV 285', 16),
('144 IV 1', 11),
('141 IV 155', 7)]
Список словарей:
nodes = [{'id': '144 IV 285','date': '2018-08-15','relevancy': 10, 'outDegree': 18},
{'id': '144 IV 240','date': '2016-08-15','relevancy': 4, 'outDegree': 10}]
Каждый элемент в ‘nodes’ должен быть расширен новой парой ключ ( inDegree
) значение на основе списка ‘source’. Мой код:
for item in sources:
for item2 in nodes:
if item2["id"] == item[0]:
item2.update( {"inDegree": item[1]})
else:
item2.update( {"inDegree": 0})
Проблема: как я могу заполнить ключ inDegree
либо значением в списке источников, либо 0, если для элемента в ‘nodes’ в списке ‘source’ нет соответствующего идентификатора?
Ответ №1:
Проблема в том, что оно повторяется source
даже после совпадения и, таким образом, перезаписывает предыдущее обновление. Вы можете распаковать свой source
и выполнить сравнение:
for item2 in nodes:
sources = list(zip(*source))
if item2["id"] in sources[0]:
item2.update({"inDegree": sources[1][sources[0].index(item2["id"])]})
else:
item2.update({"inDegree": 0})
print(nodes)
[{'id': '144 IV 285',
'date': '2018-08-15',
'relevancy': 10,
'outDegree': 18,
'inDegree': 16},
{'id': '144 IV 240',
'date': '2016-08-15',
'relevancy': 4,
'outDegree': 10,
'inDegree': 0}]
Комментарии:
1. Большое спасибо, Крис — это была именно моя проблема. Ваше решение работает отлично.
Ответ №2:
Попробуйте это:
for item in nodes:
for item2 in source:
if item["id"] == item2[0]:
item.update( {"inDegree": item2[1]})
break
else:
item.update( {"inDegree": 0})