Python фильтрация словаря, где значение - список

Имеется словарь вида:

{'a': [{'price': 3}, {'price': 0}, {'price': 5}], 'b': [{'price': 0}, {'price': 5}]}

Как отфильтровать элементы, где price > 0 и привести к виду:

{'a': [{'price': 3}, {'price': 5}], 'b': [{'price': 5}]}

Ответы (4 шт):

Автор решения: Danis

попробуйте так:

dict_ = {'a':[{'price':3}, {'price':0}, {'price':5}], 'b':[{'price':0}, {'price':5}]}

for key, arr in dict_.items():
    dict_[key] = [el for el in arr if el["price"] > 0]

print(dict_)
→ Ссылка
Автор решения: Jack_oS

Так можно, если нужен новый словарь:

data = {'a':[{'price':3}, {'price':0}, {'price':5}], 'b':[{'price':0}, {'price':5}]}
filtered_data = {}

for key, value in data.items():
    filtered_data[key] = [d for d in value if d['price'] > 0]  

    # если price не может быть меньше нуля, то:
    # filtered_data[key] = [d for d in value if d['price']]

в filtered_data будет:

>>> filtered_data
{'a': [{'price': 3}, {'price': 5}], 'b': [{'price': 5}]}

или измените исходный, как в соседнем ответе

→ Ссылка
Автор решения: Андрей Крузлик
d = {
    'a': [{'price': 3}, {'price': 0}, {'price': 5}],
    'b': [{'price': 0}, {'price': 5}]
}


for i in d:
    for n, j in enumerate(d[i]):
        if j['price'] == 0: del d[i][n]

print(d)
→ Ссылка
Автор решения: mrEvgenX

Как вариант с использованием функции filter и т.н. dict-comprehension.

data = {'a':[{'price':3}, {'price':0}, {'price':5}], 'b':[{'price':0}, {'price':5}]}
filtered_data = {
    key: list(filter(lambda product: product['price'] > 0, products))
    for key, products in data.items()
}
→ Ссылка