【问题标题】:Python3 gives me KeyError when using a tuple as a dictionary key使用元组作为字典键时,Python3 给了我 KeyError
【发布时间】:2018-06-21 22:59:40
【问题描述】:

问题是在 for 循环中很难将输入用作字典的键,我尝试使用 tuple 和 list ,但结果相同

代码如下:

import re
morse = {
"A" : ".-", 
"B" : "-...", 
"C" : "-.-.", 
"D" : "-..", 
"E" : ".", 
"F" : "..-.", 
"G" : "--.", 
"H" : "....", 
"I" : "..", 
"J" : ".---", 
"K" : "-.-", 
"L" : ".-..", 
"M" : "--", 
"N" : "-.", 
"O" : "---", 
"P" : ".--.", 
"Q" : "--.-", 
"R" : ".-.", 
"S" : "...", 
"T" : "-", 
"U" : "..-", 
"V" : "...-", 
"W" : ".--", 
"X" : "-..-", 
"Y" : "-.--", 
"Z" : "--..", 
"0" : "-----", 
"1" : ".----", 
"2" : "..---", 
"3" : "...--", 
"4" : "....-", 
"5" : ".....", 
"6" : "-....", 
"7" : "--...", 
"8" : "---..", 
"9" : "----.", 
"." : ".-.-.-", 
"," : "--..--",
" " : " "
}
print("""
                        MORSECODE ENCYPTER """)
print("Enter the text to convert(keep in mind that upper case character, numbers , (.) and (,) are only allowed) :",end = '')
to_encrypt = input()
tuple1 =  tuple( re.findall("." , to_encrypt) )
print (tuple1)  
for i in tuple1 :
    print(morse[tuple1])    

当我输入 to_encrypt 输入(例如 H)时,它给了我:

Traceback (most recent call last):
File "x.py", line 50, in <module>
print(morse[tuple1])    
KeyError: ('H',)

【问题讨论】:

  • 你为什么要使用re?您正在使用整个tuple1morse[i] 应该可以工作。但是一个简单的字典查找就可以了,for i in to_encrypt: print(morse[i])
  • 我想你想要:for i in tuple1: print(morse[i])。如果要将整个可迭代对象传递给dict,为什么要循环一个可迭代对象(这无论如何都行不通,因为您的键是单个字符)?
  • 感谢您修复 to_encode 的问题,我尝试制作它,但它给了我 Traceback(最近一次调用最后一次):文件“x.py”,第 50 行,在 print(morse[ to_encrypt]) KeyError: 'HH'
  • 您将整个值传递给 dict 查找 - 使用迭代可迭代的变量 - 即 i - morse[i]
  • 感谢 AChampion,这就是问题所在

标签: python-3.x list dictionary for-loop


【解决方案1】:

主要是你的 for 循环似乎不正确,你可以试试这个:

to_encrypt = list(str(input()))

for ch in to_encrypt:
    morse_val = morse.get(ch, None)

    if not morse_val:
        print('could not encode ', ch)

    else:
        print(morse_val)

如果您需要更好的说明,请告诉我。 P.S - 上面的代码假设您已经定义了 morse 字典。另外,我没有看到在此使用正则表达式的目的。

【讨论】:

  • 这比我的更简单整洁,提前感谢:),我使用了正则表达式,因为我不知道上面的 get ,所以我制作了一个由用户输入的每个字符组成的元组用字典替换它。
猜你喜欢
  • 2020-09-25
  • 2016-06-27
  • 2010-11-28
  • 2011-12-25
  • 2012-02-20
  • 1970-01-01
  • 2019-10-25
  • 2022-06-14
  • 1970-01-01
相关资源
最近更新 更多