Проверьте, существует ли элемент списка в словаре - PullRequest
0 голосов
/ 30 апреля 2018

Как я могу проверить, существует ли список в словаре, чей элемент является списком? Например, у меня есть следующий словарь:

dict1 = {0:[0,1,3], 1:[0,2,3]}

Например, [1,0,3] существует в dict1 и возвращает соответствующий key, но [2,3] не существует в dict1.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Используя тот факт, что один список (не список списков) будет сопоставляться только одному значению словаря, вы можете использовать выражение генератора со значением по умолчанию None:

>>> dict1 = {0:[0, 1, 3], 1:[0, 2, 3]}
>>> lst = [1, 0, 3]
>>> next((k for k, v in dict1.items() if sorted(v) == sorted(lst)), None)
0
0 голосов
/ 30 апреля 2018

Один вкладыш для поиска значения , а не ключа в словаре:

any(x == <some-value> for x in dict1.itervalues())

Но учтите, что это линейный поиск. Если порядок не имеет значения, а элементы не могут быть продублированы и могут быть хэшируемыми, то в идеале вы должны хранить свои значения как наборы:

>>> dict1 = {0: set([0, 1, 3]), 1: set([0,2,3])}

Тогда вы можете искать просто:

>>> any(x == set([1, 0, 3]) for x in dict1.itervalues())
True

Если вы не хотите хранить их как наборы, и ваши списки могут содержать дубликаты или не подлежащие изменению объекты, вы можете сравнить отсортированные значения. Чтобы сделать его более эффективным в этом случае, вы должны предварительно отсортировать значение поиска:

>>> dict1 = {0: [0, 1, 3]), 1: [0,2,3]}
>>> search_value = sorted([1, 0, 3])
>>> any(sorted(x) == search_value for x in dict1.itervalues())
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...