Я хочу проверить, существует ли весь словарь (как ключ, так и значение) в списке словарей. Каждый словарь может быть вложенным словарем словарей и списков.
Когда у меня есть много скаляров, которые я хочу проверить, существует ли каждый скаляр в целевом списке скаляров, я обычно превращаю целевой список в набор и проверяю наличие в наборе, например scalar in set(list_of_scalars)
. (Пожалуйста, дайте мне знать, если это уже не лучший способ сделать это)
Для диктов я не могу сделать my_dict in set(list_of_dicts)
, потому что это повышает unhashable type: 'dict'
.
Выполнение my_dict in list_of_dicts
, похоже, правильно возвращает False
, если существует то же имя ключа, но значение другое (это то, что я хочу), но меня беспокоит время выполнения; python оптимизирует это внутри? Что еще я могу делать?
РЕДАКТИРОВАТЬ: предположим, что я буду выполнять МНОГИЕ поиски и использовать Python3.7
scalar in set(list_of_scalars)
кажется менее кратким, чем простоscalar in list_of_scalars
. Если вы думаете, а не быстрее ли проверка членства для наборов, чем для списков? Это правда, но вы также конвертируете из списка в набор, поэтому вы теряете больше времени, чем получаете. Я не рекомендуюmy_dict in list_of_dicts
, если вы хотите произвольно глубоко рекурсировать, чтобы найти диктовку. Например,{1:2} in [{3: {1:2}}]
дает False. - person Kevin   schedule 28.01.2019str(needle_dict) in str(list_of_dicts)
, поскольку в 3.6+ порядок диктов гарантирован - person Joran Beasley   schedule 28.01.2019