Проверьте, все ли значения существуют как словарь в словаре - PullRequest
0 голосов
/ 06 июня 2018

У меня есть список значений и словарь.Я хочу убедиться, что каждое значение в списке существует в качестве ключа в словаре.В настоящее время я использую два набора, чтобы выяснить, не существует ли каких-либо значений в словаре

unmapped = set(foo) - set(bar.keys())

Есть ли более питонский способ проверить это?Это похоже на взлом?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Попробуйте, чтобы увидеть, есть ли какой-либо элемент без карты:

has_unmapped = all( (x in bar) for x in foo   )

Чтобы увидеть элементы без карты:

unmapped_items = [ x for x in foo if x not in bar ]
0 голосов
/ 06 июня 2018

Ваш подход будет работать, однако, будет преобразование в set.

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

all(i in bar for i in foo)

Оба эти решенияимеет временную сложность O(len(foo))

bar = {str(i): i for i in range(100000)}
foo = [str(i) for i in range(1, 10000, 2)]

%timeit all(i in bar for i in foo)
462 µs ± 14.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit set(foo) - set(bar)
14.6 ms ± 174 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

# The overhead is all the difference here:

foo = set(foo)
bar = set(bar)

%timeit foo - bar
213 µs ± 1.48 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Служебные данные здесь имеют довольно большое значение, поэтому я бы выбрал all здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...