【问题标题】:Check if a word exists in a dictionary doesn't find any word检查字典中是否存在单词未找到任何单词
【发布时间】:2017-07-31 15:13:02
【问题描述】:

我想查找字典中是否包含该单词。 来自列表的单词是循环递增的。 如果您在下面没有收到问题评论,请提出建议。

n = int(input())

d = {}

for i in range(n):
   text = input().split()     
   d[text[0]] = text[1]

list = []

for i in range(n):
    list.append(input())

for i in range(n):
    ***`if list[i] in d == True:`***
        print(d[i])

    else:
        print("Not Found") 

【问题讨论】:

  • 只是if list[i] in d。您的具体问题是什么?
  • if list[i] in d: print(d[list[i]])
  • "如果您在下面没有收到问题评论,请提出建议。" *评论*
  • @MunafHajir 你的具体问题是什么?
  • "a" in list[i] == True 链接运营商 in== 短路时尚。由于list[i]True 不同,全局条件始终为False。

标签: python python-3.x dictionary


【解决方案1】:

您指出了问题:

if list[i] in d == True:

list[i] in d == True 以短路方式链接运算符 in==(如 (list[i] in d) and (d==True)

由于dTrue 不同,全局条件始终为False,并且似乎该词不在字典中。

用括号保护(有效,但丑陋):

if (list[i] in d) == True:

或使用pythonic真值测试(永远不要与TrueFalse比较,使用in dnot in d):

if list[i] in d:

顺便说一句,正如 COLDSPEED 所指出的,既然语句有效,您将在此处遇到错误,因为 d 没有整数键:

print(d[i])   # d[list[i]] would be correct (but ugly)

所以重写你的循环,在你使用它的时候去掉索引,直接迭代元素(去掉list作为变量,因为这是list类型,切换到l) :

for item in l:
    if item in d:
        print(item)

更好吧?

【讨论】:

  • 我从来没有理解过许多人必须使用逻辑运算符从已经是布尔表达式中生成布尔值的倾向。
  • @FredLarson 是的。即使在 K&R C 中你也不需要它……我知道。
  • 这解决了一半的问题。仍然存在 OP 使用整数来索引字典的问题...
  • @cᴏʟᴅsᴘᴇᴇᴅ 是的,这是下一个问题。始终无法达到声明False。编辑。谢谢
猜你喜欢
  • 2017-12-11
  • 2014-04-06
  • 2016-06-14
  • 1970-01-01
  • 2021-08-18
  • 2013-05-24
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
相关资源
最近更新 更多