我有一个值列表和一个字典.我想确保列表中的每个值都作为字典中的键存在.目前我正在使用两套来确定字典中是否存在任何值
unmapped = set(foo) - set(bar.keys())
有没有更多的pythonic方式来测试这个?感觉有点像黑客?
最佳答案
您的方法将起作用,但是,从转换到设置会有开销.
具有相同时间复杂度的另一种解决方案是:
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)
这里的开销有很大的不同,所以我会在这里选择所有.