Ключ python dict в списке для фильтрации - python

a = [{"price": 1,"id": 1},{"price": 8.2, "id": 2}, {"price": 10.99,"id": 3}]

user = ['price', 'abc']

вывод должен быть:

output = [{"price": 1},{"price": 8.2}, {"price": 10.99}]

Сценарий заключается в том, что ключи диктовать должны быть отфильтрованы по списку пользователь.

Почему в 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
0
24
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать понимание списка

[{u: val_a.get(u) for u in user if val_a.get(u)} for val_a in a]

Вложенные включения могут быть нежелательными, и в приведенном выше примере значение проверяется дважды. Построение ваших результатов с помощью цикла может дать самый простой результат и в то же время быть читабельным:

results = []
for val_a in a:
    result = {}
    for u in user:
        u_val = val_a.get(u)
        if u_val:
            result.update({u: u_val})
    results.append(result)

Python3.8+:

results = []
for val_a in a:
    result = {}
    for u in user:
        if u_val := val_a.get(u)
            result.update({u: u_val})
    results.append(result)
Ответ принят как подходящий

Вы можете использовать операцию пересечения множества, чтобы сохранить ключи:

result = [{k: d[k] for k in set(d.keys()).intersection(set(user))} for d in a]
print(result)

Это печатает:

[{'price': 1}, {'price': 8.2}, {'price': 10.99}]

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