我正在尝试验证查看列表中某些拆分值是否来自python中dict的某些值。
例如,
user_input = ".."
morse_code = {"A": ".-", "N": "-.", "B": "-...", "O": "---", "C": "-.-.", "P": ".--.", "D": "-..", "Q": "--.-", "E": ".", "R": ".-.", "F": "..-.", "S": "...", "G": "--.", "T": "-", "H": "....", "U": "..-", "I": "..", "V": "...-", "K": "-.-", "X": "-..-", "J": ".---", "W": ".--", "L": ".-..", "Y": "-.--", "M": "--", "Z": "--.."}
>>> user_input in morse_code.values()
True
>>> user_input.split() in morse_code.values()
False
我想user_input == user_input.split()
但事实并非如此。为什么???
答案 0 :(得分:2)
它的beacuse split
方法返回元素列表。
>>> user_input.split()
['..']
>>> user_input
'..'
你的词典中没有列表。
答案 1 :(得分:0)
您可以使用all
,any
或列出压缩:
if all([i for i in user_input.split() if i in morse_code.values()]) # True if all the split items are in the values
if any([i for i in user_input.split() if i in morse_code.values()]) # True if any of the split items are in the values
valids = [i for i in user_input.split() if i in morse_code.values()]
最后一个将在valids
中返回拆分中与值匹配的所有项目的列表。你几乎可以肯定通过首先构造一组值来加速处理,即:
codes = morse.values()
valids = [i for i in user_input.split() if i in codes]