Объединение списков словарей на основе значений вложенного спискаPython

Программы на Python
Ответить
Anonymous
 Объединение списков словарей на основе значений вложенного списка

Сообщение Anonymous »

Я пытаюсь создать новый список на основе двух входных списков. Вот пример:

Код: Выделить всё

data_1 = [
{
"title": "System", "priority": "medium", "subtitle": "mason",
"files": [
{"name": "mason", "path": "/tmp/mason/mason.json"},
{"name": "mason", "path": "/tmp/mason/build.json"}
]},
{
"title": "System", "priority": "medium", "subtitle": "kylie",
"files": [
{"name": "kylie", "path": "/tmp/kylie/build.tar"},
{"name": "kylie", "path": "/tmp/kylie/kylie.json"}
]}
]

data_2 = [
{
"title": "System", "priority": "medium",
"files": [
{"name": "build", "path": "/tmp/kylie/build.tar"},
{"name": "kylie", "path": "/tmp/kylie/kylie.json"},
{"name": "mason", "path": "/tmp/mason/mason.json"},
{"name": "build", "path": "/tmp/mason/build.json"}
]}
]

merged = [
{
"title": "System", "priority": "medium", "subtitle": "mason",
"files": [
{"name": "mason", "path": "/tmp/mason/mason.json"},
{"name": "build", "path": "/tmp/mason/build.json"}
]},
{
"title": "System", "priority": "medium", "subtitle": "kylie",
"files": [
{"name": "build", "path": "/tmp/kylie/build.tar"},
{"name": "kylie", "path": "/tmp/kylie/kylie.json"}
]}
]
В принципе, было бы нормально сохранить данные из списка data_1 и просто заменить files.name именами из списка data_2, тот же путь. Или умножьте элемент в data_2, назначив подзаголовок и удалив все элементы data_2.files, которые не соответствуют путям, указанным в списке data_1.
Во всяком случае, я начал делать что-то вроде:

Код: Выделить всё

for d1 in data_1:
for d2 in data_2:
d1_key = (d1.get("title"), d1.get("priority"))
d2_key = (d1.get("title"), d1.get("priority"))
if d1_key == d2_key:
for df in d1.get("files"):
if any(df.get("path") in entry.get("path") for entry in d2.get("files")):
print("Help! There must be easier way!")
И я не думаю, что это достаточно ясно, чтобы вдаваться в подробности.
Не могли бы вы предложить какой-либо другой способ объединения список создан?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ist-values
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»