#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. Спасибо. Это работает. Я также исправил исходный вопрос.