В этой статье вы узнаете Как отфильтровать список словарей Отказ Так что давайте начнем!
Краткий ответ: заявление о понимании списка [X для X в LST, если условие (x)] Создает новый список словарей, которые соответствуют условию. Все словари в лишенство которые не соответствуют состоянию отфильтровывают. Вы можете определить свое собственное состояние в элементе списка x .
Вот быстрый и минимальный пример:
l = [{'key':10}, {'key':4}, {'key':8}] def condition(dic): ''' Define your own condition here''' return dic['key'] > 7 filtered = [d for d in l if condition(d)] print(filtered) # [{'key': 10}, {'key': 8}]
Попробуйте сами в интерактивной оболочке Python (в вашем браузере):
Теперь вы получите пошаговое решение этого решения. Я пытался сохранить его как можно просто. Так что держите чтение!
Фильтр списка словарей по значению
Проблема : Учитывая список словарей. Каждый словарь состоит из одного или нескольких (ключевых, значение) пар. Вы хотите отфильтровать их по значению определенного словаря ключа ( атрибут ). Как ты это делаешь?
Минимальный пример : Рассмотрим следующий пример, где у вас три пользовательских словаря с Имя пользователя
, возраст
и Play_Time
Ключи. Вы хотите получить список всех пользователей, которые соответствуют определенным условиям, таким как Play_Time> 100
Отказ Вот что вы пытаетесь сделать:
users = [{'username': 'alice', 'age': 23, 'play_time': 101}, {'username': 'bob', 'age': 31, 'play_time': 88}, {'username': 'ann', 'age': 25, 'play_time': 121},] superplayers = # Filtering Magic Here print(superplayers)
Выход должен выглядеть так, где Play_Time
Атрибут определяет, проходит ли словарь фильтровать или нет, то есть Play_Time> 100
:
[{'username': 'alice', 'age': 23, 'play_time': 101}, {'username': 'ann', 'age': 25, 'play_time': 121}]
Решение : Используйте Понимание списка [X для X в lst, если условие (x)]
Чтобы создать новый список словарей, которые соответствуют условию. Все словари в lst
которые не соответствуют состоянию отфильтровывают. Вы можете определить ваше собственное состояние в элементе списка х
Отказ
Вот код, который показывает, как отфильтровать все пользовательские словари, которые не соответствуют условию сыграли не менее 100 часов.
users = [{'username': 'alice', 'age': 23, 'play_time': 101}, {'username': 'bob', 'age': 31, 'play_time': 88}, {'username': 'ann', 'age': 25, 'play_time': 121},] superplayers = [user for user in users if user['play_time']>100] print(superplayers)
Выходной вывод является отфильтрованным списком словарей, соответствующих условию:
[{'username': 'alice', 'age': 23, 'play_time': 101}, {'username': 'ann', 'age': 25, 'play_time': 121}]
Попробуй сам:
Сопутствующие статьи на блоге Finxter:
- Список понимания Лямбда функции
- Словари
Фильтровать список словарей по ключу
Проблема : Учитывая список словарей. Каждый словарь состоит из одного или нескольких (ключевых, значение) пар. Вы хотите отфильтровать их по ключу ( атрибут ). Все словари, которые не имеют этого ключа (атрибута), должны быть отфильтрованы. Как ты это делаешь?
Минимальный пример : Рассмотрим следующий пример еще раз, когда у вас три пользовательских словаря с Имя пользователя
, возраст
и Play_Time
Ключи. Вы хотите получить список всех пользователей, для которых ключ Play_Time
существует. Вот что вы пытаетесь сделать:
users = [{'username': 'alice', 'age': 23, 'play_time': 101}, {'username': 'bob', 'age': 31, 'play_time': 88}, {'username': 'ann', 'age': 25},] superplayers = # Filtering Magic Here print(superplayers)
Выход должен выглядеть так, где Play_Time
Атрибут определяет, проходит ли словарь фильтр или нет (до тех пор, пока он существует, он пройдет фильтр).
[{'username': 'alice', 'age': 23, 'play_time': 101}, {'username': 'bob', 'age': 31, 'play_time': 88}]
Решение : Используйте Понимание списка [X для X в lst, если условие (x)]
Чтобы создать новый список словарей, которые соответствуют условию. Все словари в lst
которые не соответствуют состоянию отфильтровывают. Вы можете определить ваше собственное состояние в элементе списка х
Отказ
Вот код, который показывает, как отфильтровать все пользовательские словари, которые не соответствуют условию наличия ключа Play_Time
Отказ
users = [{'username': 'alice', 'age': 23, 'play_time': 101}, {'username': 'bob', 'age': 31, 'play_time': 88}, {'username': 'ann', 'age': 25},] superplayers = [user for user in users if 'play_time' in user] print(superplayers)
Выходной вывод является отфильтрованным списком словарей, соответствующих условию:
[{'username': 'alice', 'age': 23, 'play_time': 101}, {'username': 'bob', 'age': 31, 'play_time': 88}]
Попробуй сам:
Сопутствующие статьи на блоге Finxter:
- Список понимания Лямбда функции
- Словари
Похожие вопросы: Как сортировать список словарей по значению ключей
Оригинальная статья
Проблема : Учитывая список словарей. Каждый словарь состоит из нескольких (ключ, стоимости) пар. Вы хотите отсортировать их по значению определенного ключа словаря ( атрибут ). Как вы сортируете этот словарь?
Минимальный пример : Рассмотрим следующий пример, где вы хотите отсортировать список складских наплат по значению ключа «Алиса»
Отказ
salaries = [{'Alice': 100000, 'Bob': 24000}, {'Alice': 121000, 'Bob': 48000}, {'Alice': 12000, 'Bob': 66000}] sorted_salaries = # ... Sorting Magic Here ... print(sorted_salaries)
Вывод должен выглядеть так, где зарплата Алисы определяет порядок словарей:
[{'Alice': 12000, 'Bob': 66000}, {'Alice': 100000, 'Bob': 24000}, {'Alice': 121000, 'Bob': 48000}]
Решение : У вас есть два основных способа сделать это – оба основаны на определении ключевой функции методов сортировки Python. Основная функция отображает каждый элемент списка (в нашем случае словарь) к одному значению, которое можно использовать в качестве основы сравнения.
- Используйте функцию лямбда в качестве функции ключа, чтобы сортировать список словарей.
- Используйте функцию itemgetter в качестве ключевой функции для сортировки списка словарей.
Вот код первого варианта, используя функцию лямбда, которая возвращает значение ключа «Алиса»
из каждого словаря:
# Create the dictionary of Bob's and Alice's salary data salaries = [{'Alice': 100000, 'Bob': 24000}, {'Alice': 121000, 'Bob': 48000}, {'Alice': 12000, 'Bob': 66000}] # Use the sorted() function with key argument to create a new dic. # Each dictionary list element is "reduced" to the value stored for key 'Alice' sorted_salaries = sorted(salaries, key=lambda d: d['Alice']) # Print everything to the shell print(sorted_salaries)
Вывод – это сортированный словарь. Обратите внимание, что первый словарь имеет самую маленькую зарплату Алисы, а третий словарь имеет наибольшую зарплату Алисы.
[{'Alice': 12000, 'Bob': 66000}, {'Alice': 100000, 'Bob': 24000}, {'Alice': 121000, 'Bob': 48000}]
Попробуй сам:
Статьи по Теме:
- Окончательное руководство по спискам Python
Куда пойти отсюда
В этой статье вы узнали, как легко отфильтровать список словарей с помощью простого выписки по пониманию списка. Это гораздо более эффективно, чем использование Фильтр ()
Метод предложен во многих других учебных пособиях в блогах. Гвидо, создатель Python, ненавидел Фильтр ()
Функция!
Я понял, что профессиональные кодеры, как правило, используют словари чаще, чем начинающим из-за их превосходного понимания преимуществ словарей. Если вы хотите узнать о тех, ознакомьтесь с моим углубленным учебником словарей Python.
Если вы хотите прекратить обучение и начать зарабатывать с Python, проверьте мой бесплатный вебинар «Как стать бесцеретный разработчик Python?» Отказ Это отличный способ начать процветающий кодирующий бизнес онлайн.
«[Вебинар] Как стать бесцеретный разработчик Python?»
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.