Каков эффективный способ фильтрации словаря python на основе наличия элемента в списке значений?

#python #data-structures

#питон #структуры данных

Вопрос:

У меня есть словарь (таблица), определенный следующим образом:

 table = {"id": [1, 2, 3]}, {"file": ['good1.txt', 'bad2.txt', 'good3.txt']}  

и у меня есть список плохих кандидатов, которых следует удалить:

 to_exclude = ['bad0.txt', 'bad1.txt', 'bad2.txt']  

Я надеюсь отфильтровать таблицу на основе того, можно ли найти файл в строке моей таблицы внутри to_exclude.

 filtered = {"id": [1, 2]}, {"file": ['good1.txt', 'good3.txt']}  

Я предполагаю, что я мог бы использовать цикл for для проверки записей по одной, но мне было интересно, как наиболее эффективно с помощью python решить эту проблему.

Может ли кто-нибудь дать некоторые рекомендации по этому поводу? Спасибо.

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

1. Я удалил свой ответ, потому что неправильно истолковал вопрос. И это было неправильно. Будет переделано.

2. Ваша структура данных недействительна. Вы имеете в виду, что это будет список словарей или один словарь ?

Ответ №1:

Я предполагаю, что вы неправильно написали свою структуру данных. У вас есть набор из двух словарей, что невозможно. (Словари не хэшируются). Я надеюсь, что ваши фактические данные:

 data = {"id": [1, 2, 3], "file": [.......]}  

словарь с двумя ключами.

Так что для меня самым простым было бы:

 # Create a set for faster testing to_exclude_set = set(to_exclude) # Create (id, file) pairs for the pairs we want to keep pairs = [(id, file) for id, file in zip(data["id"], data["file"])  if file not in to_exclude_set] # Recreate the data structure result = { 'id': [_ for id, _ in pairs],  'file': [_ for _, file in pairs] }  

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

1. Спасибо. Это работает. Я также исправил исходный вопрос.