2017-05-29 50 views
1

我真的试图验证是否从列表中的某些分裂值在一定值从字典中的蟒蛇。如何从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()但它`不是。这是为什么??

+1

'str.split()'返回一个列表加快处理,*总是*,即使它只包含一个元素。字典中没有任何值是列表。 –

+0

你为什么要拆分? – gonczor

+0

你有没有'打印(user_input.split())'?这一切都需要看,它是从'user_input' –

回答

2

这是怎么一回事,因为split方法retuns元素的列表。

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

你没有在你的字典中列出。

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] 
+0

不同请问这个答案OP的问题吗? – gonczor