GOOGLE ADS

вторник, 26 апреля 2022 г.

Python Получить список словарей из вложенного словаря, где значение больше

У меня проблема. У меня есть такой вложенный словарь:

{1: {'amount': 200.0, 'quantity': 0}, 2: {'amount': 200.0, 'quantity': 0}, 3: {'amount': 200.0, 'quantity': 0}, 4: {'amount': 200.0, 'quantity': 0}, 5: {'amount': 200.0, 'quantity': 0}, 6: {'amount': 200.0, 'quantity': 0}, 7: {'amount': 200.0, 'quantity': 0}, 8: {'amount': 200.0, 'quantity': 0}, 9: {'amount': 200.0, 'quantity': 0}, 10: {'amount': 200.0, 'quantity': 0}}

Что мне нужно сделать, так это создать массив/список со всеми словарями с размером amountбольше 10. У меня уже было следующее:

list(filter(lambda x: x['amount'] >= 10, myDict.values()))

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

Я получил это прямо сейчас в результате:

[{'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}]

Но это то, что мне нужно:

[{1: {'amount': 200.0, 'quantity': 0}}, {2: {'amount': 200.0, 'quantity': 0}}, etc]

Как я могу включить ключи?


Решение проблемы

IIUC, понимание списка должно работать:

out = [{k:v} for k,v in my_data.items() if v['amount']>=10]

или используя filter:

out = [*map(dict, zip(filter(lambda x: x[1]['amount']>=10, my_data.items())))]

Выход:

[{1: {'amount': 200.0, 'quantity': 0}},
{2: {'amount': 200.0, 'quantity': 0}},
{3: {'amount': 200.0, 'quantity': 0}},
...
{9: {'amount': 200.0, 'quantity': 0}},
{10: {'amount': 200.0, 'quantity': 0}}]

Для словаря, который вы можете перемещать по ключу, это еще проще:

out = {k:v for k,v in my_data.items() if v['amount']>=10}

или

out = dict(filter(lambda x: x[1]['amount']>=10, my_data.items()))

где вывод:

{1: {'amount': 200.0, 'quantity': 0},
2: {'amount': 200.0, 'quantity': 0},
3: {'amount': 200.0, 'quantity': 0},
...
9: {'amount': 200.0, 'quantity': 0},
10: {'amount': 200.0, 'quantity': 0}}

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...