首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何逐个检查一个值是否在字典中

如何逐个检查一个值是否在字典中
EN

Stack Overflow用户
提问于 2022-05-11 12:59:52
回答 2查看 61关注 0票数 1

我对编码非常陌生,所以我确信这是一个非常简单的问题,但下面是我的代码:

代码语言:javascript
复制
d = {'1': 'my', '3': 'is', '2': 'name', '5': 'johnny', '4': 'appleseed'}
phrase = ('my', 'nme', 'es', 'johnny', 'appleseed')

for i in range(1,len(phrase)):
    if phrase not in d.values():
        print("Typo")
    else:
        print("No typo")

我要做的是一个一个地检查每个字符串,看看它是否存在于字典"d“中。如果它是存在的,我想打印“没有台风”,如果不是,我想打印“台风”。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-11 13:13:42

一个建议,避免重复使用x in d.values(),因为平均复杂度是O(n)

初始化一个集以进行O(1)搜索:

代码语言:javascript
复制
d = {'1': 'my', '3': 'is', '2': 'name', '5': 'johnny', '4': 'appleseed'}
phrase = ('my', 'nme', 'es', 'johnny', 'appleseed')

S = set(d.values())
for w in phrase:
    if w not in S:
        print(f"{w}: Typo")
    else:
        print(f"{w}: No typo")

示例(重复值):

代码语言:javascript
复制
d = {'1': 'my', '3': 'is', '2': 'name', '5': 'johnny', '4': 'appleseed'}
d = dict(enumerate(list(d.values())*100000))
phrase = ('my', 'nme', 'es', 'johnny', 'appleseed')*1000

%%timeit
S = set(d.values())
for w in phrase:
    w not in S
3.35 ms ± 51.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%%timeit
for w in phrase:
    w not in d.values()
13.3 s ± 76.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

示例2(唯一值):

代码语言:javascript
复制
d = {'1': 'my', '3': 'is', '2': 'name', '5': 'johnny', '4': 'appleseed'}
d = dict(enumerate(range(1000000)))
phrase = (0,1,2,3,-1,-2)*1000

%%timeit
S = set(d.values())
for w in phrase:
    w not in S
30.1 ms ± 1.42 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%%timeit
for w in phrase:
    w not in d.values()
# sill running after 1min
票数 3
EN

Stack Overflow用户

发布于 2022-05-11 13:06:00

代码语言:javascript
复制
d = {'1': 'my', '3': 'is', '2': 'name', '5': 'johnny', '4': 'appleseed'}
phrase = ('my', 'nme', 'es', 'johnny', 'appleseed')

for i in phrase:
    if i not in d.values():
        print(f"{i} → Typo")
    else:
        print(f"{i} → No typo")

输出

代码语言:javascript
复制
my → No typo
nme → Typo
es → Typo
johnny → No typo
appleseed → No typo
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72201510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档