У меня есть два списка словарей. Один находится во вложенном иерархическом формате, а другой - в простом списке словарей. Я пытаюсь сделать как «внешнее соединение», которое мы делаем в pandas или sql, как «соединение». По сути, я пытаюсь получить ключ / значение из словаря, в котором ключ / значение не существует в другом. Вот что я попробовал.
словарь 1: большие вложенные словари:
data = [
{'file_name': 'abc.pdf',
'year':'2016',
'overview': {
'student_id': '123abc',
'name': 'Adam Smith',
'courses': ['Math', 'Physics'],
}},
{'file_name': 'def.pdf',
'year':'2017',
'overview': {
'student_id': '123abc',
'name': 'Adam Smith',
'courses': ['Arts'],
}}
]
словарь 2:
mapper =[{
'year':'2016',
'student_id': '123abc',
'counselor':'Matthews',
'grades':'85'
}]
try / merging
pairs = zip(mapper,data)
try 1
[(x,y) for x, y in pairs if x['student_id'] == y['overview']['student_id']]
>> gives result:
[({'year': '2016',
'student_id': '123abc',
'counselor': 'Matthews',
'grades': '85'},
{'file_name': 'abc.pdf',
'year': '2016',
'overview': {'student_id': '123abc',
'name': 'Adam Smith',
'courses': ['Math', 'Physics']}})]
try 2:
[(x,y) for x, y in pairs if x['student_id'] == y['overview']['student_id'] & x['year'] == y['year']]
# gives errors: `TypeError: unsupported operand type(s) for &: 'str' and 'str'`
Попытка получить этот результат: если год и student_id в обоих словарях совпадают, то дайте эти результаты. Из словаря 2: я пытаюсь найти совпадение, если год и student_id совпадают, затем заполнить советник, «оценки» для словаря 1. Если они не совпадают, то с учетом элемента словаря.
new_data = [
{'file_name': 'abc.pdf',
'year':'2016',
'overview': {
'student_id': '123abc',
'name': 'Adam Smith',
'courses': ['Math', 'Physics'],
'counselor':'Matthews',
'grades':'85'
}},
{'file_name': 'def.pdf',
'year':'2017',
'overview': {
'student_id': '123abc',
'name': 'Adam Smith',
'courses': ['Arts'],
}}
]