У меня есть 2 массива, как показано ниже:
массив 1:
[
{"name": "A", "class" : "1"},
{"name": "B", "class" : "2"},
{"name": "C", "class" : "3"}
]
массив 2:
[ "A","B"]
Я хочу объединить 2 массива и ожидаемый результат:
[
{"name": "A", "class" : "1"},
{"name": "B", "class" : "2"}
]
Любое предложение приветствуется
Что я нашел до сих пор:
Этот вопрос, похоже, не связан с JSON, если только вы не получаете эти значения в виде строки. Ваше первое значение — это обычный словарь Python.
Это не слияние; это фильтр. Вы хотите выбрать dicts
, чье значение name
отображается в списке 2. JSON не имеет значения, за исключением того, что он является источником одного или обоих списков; фильтрация не заботится о том, как определяются списки.
@chepner Я воспринял это как «слияние» в смысле SQL.
Просто используйте понимание list
:
first = [
{"name": "A", "class" : "1"},
{"name": "B", "class" : "2"},
{"name": "C", "class" : "3"}
]
second = ['A', 'B']
result = [d for d in first if d['name'] in second]
print(result)
Выход:
[{'name': 'A', 'class': '1'}, {'name': 'B', 'class': '2'}]
В случае, поднятом в комментариях:
from operator import itemgetter
first = [
{"name": "A", "class" : "1"},
{"name": "B", "class" : "2"},
{"name": "C", "class" : "3"}
]
second = [
{"name": "A"},
{"name": "B"}
]
result = [d for d in first if d['name'] in map(itemgetter('name'), second)]
print(result)
Выход:
[{'name': 'A', 'class': '1'}, {'name': 'B', 'class': '2'}]
если второй массив представляет собой массив JSON: [{'name': 'A'}, {'name': 'B'}]. Как добиться результата?
@PhongVu [d for d in first if d in second]
будет работать нормально.
@PhongVu Массив JSON - это просто строка, которая может быть расшифрован в некоторой собственной структуре данных. [{'name': 'A'}, {'name':'B'}]
— это обычный список Python, состоящий из dicts
, который был инициализирован из массива JSON.
Спасибо @chepner за разъяснение слова «массив JSON».
@gmds: я попробовал ваше предложение, оно просто возвращает пустой массив []
во всяком случае, я отметил это как ответ. Мой подвопрос только для обучения
@gmds: Круто. Большое спасибо
Возможный дубликат Python: отфильтровать список списка с другим списком