Как объединить массив JSON и массив

У меня есть 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"}
]

Любое предложение приветствуется

Что я нашел до сих пор:

Возможный дубликат Python: отфильтровать список списка с другим списком

Brown Bear 09.04.2019 16:35

Этот вопрос, похоже, не связан с JSON, если только вы не получаете эти значения в виде строки. Ваше первое значение — это обычный словарь Python.

Christoph Burschka 09.04.2019 16:37

Это не слияние; это фильтр. Вы хотите выбрать dicts, чье значение name отображается в списке 2. JSON не имеет значения, за исключением того, что он является источником одного или обоих списков; фильтрация не заботится о том, как определяются списки.

chepner 09.04.2019 16:39

@chepner Я воспринял это как «слияние» в смысле SQL.

gmds 09.04.2019 16:41
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
159
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто используйте понимание 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'}]. Как добиться результата?

Phong Vu 09.04.2019 16:42

@PhongVu [d for d in first if d in second] будет работать нормально.

gmds 09.04.2019 16:48

@PhongVu Массив JSON - это просто строка, которая может быть расшифрован в некоторой собственной структуре данных. [{'name': 'A'}, {'name':'B'}] — это обычный список Python, состоящий из dicts, который был инициализирован из массива JSON.

chepner 09.04.2019 16:48

Спасибо @chepner за разъяснение слова «массив JSON».

Phong Vu 09.04.2019 16:53

@gmds: я попробовал ваше предложение, оно просто возвращает пустой массив []

Phong Vu 09.04.2019 16:54

во всяком случае, я отметил это как ответ. Мой подвопрос только для обучения

Phong Vu 09.04.2019 16:56

@gmds: Круто. Большое спасибо

Phong Vu 09.04.2019 17:01

Другие вопросы по теме