如何在python中的dict中验证某些值中的某些拆分值?

时间:2017-05-29 13:00:27

标签: python split

我正在尝试验证查看列表中某些拆分值是否来自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()但事实并非如此。为什么???

2 个答案:

答案 0 :(得分:2)

它的beacuse split方法返回元素列表。

>>> user_input.split()
['..']
>>> user_input
'..'

你的词典中没有列表。

答案 1 :(得分:0)

您可以使用allany或列出压缩:

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]