Рубрики
Без рубрики

Как отфильтровать список словарей в Python?

В этой статье вы узнаете, как фильтровать список словарей. Так что давайте начнем! Краткий ответ: Заявление о понимании списка [X для X в LST, если условие (x)] создает новый список словарей, которые соответствуют условию. Все словари в LST, которые не соответствуют состоянию, отфильтровываются. Вы можете определить ваш … Как отфильтровать список словарей в Python? Прочитайте больше “

Автор оригинала: Chris.

В этой статье вы узнаете Как отфильтровать список словарей Отказ Так что давайте начнем!

Краткий ответ: заявление о понимании списка [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 и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.