@ Mark , здесь я показал 3 способа решения проблемы.Пожалуйста, проверьте это и дайте мне знать, удовлетворяет ли это вашей проблеме или нет с некоторым набором новых входов и ожидаемых выходов.Я буду обновлять код, основываясь на этом.
Первый способ - используя понимание списка, extended (), set ()
попробуйте его онлайн на http://rextester.com/WEE27295.
# List of strings
my_list = ['john', 'james', 'joey']
# List of dictionaries
results = [{"name": 'john', "age": 20}, {"name": 'james', "age": 25}]
new_persons = [{"name": name, "age": 30} for name in set(my_list) if name not in set((person["name"] for person in results))];
results.extend(new_persons);
print(results)
"Вывод
[{'age': 20, 'name': 'john'}, {'age': 25, 'name': 'james'}, {'age': 30, 'name': 'joey'}]
" Второй способ - использование set ()
Попробуйте онлайн на http://rextester.com/WBAT64136.
# List of strings
my_list = ['john', 'james', 'joey']
# List of dictionaries
results = [{"name": 'john', "age": 20}, {"name": 'james', "age": 25}]
unique_names = set((person["name"] for person in results));
for name in my_list:
if name not in unique_names:
new_person = {
'name': name,
'age': 30
}
results.append(new_person);
print(results)
& "Вывод
[{'age': 20, 'name': 'john'}, {'age': 25, 'name': 'james'}, {'age': 30, 'name': 'joey'}]
" Третий способ - использование вложенных циклов
Попробуйте онлайн в http://rextester.com/DSB44497.
# List of strings
my_list = ['john', 'james', 'joey']
# List of dictionaries
results = [{"name": 'john', "age": 20}, {"name": 'james', "age": 25}]
for name in my_list:
found = False;
for person in results:
if person["name"] == name:
found = True
if not found:
new_person = {
'name': name,
'age': 30
}
results.append(new_person);
print(results)
"Выход
[{'name': 'john', 'age': 20}, {'name': 'james', 'age': 25}, {'name': 'joey', 'age': 30}]