Loop through dictionary keys to get values based on input
1)在我的程序中,我从提示用户输入开始。
2)然后我想循环访问用户输入以获取该字符串中的所有字符,并根据字典键分别查询每个字符。
3)如果输入的字符与字典中的键匹配,我希望返回该键的值。
4)这需要对每个字符重复,并且结果应该打印以字符串形式返回的值。
为了进一步解释,这是我的字典:
1 2 3 4 5 | dataDict = { "a":"1", "b":"2", "c":"3", } |
例如:
如果我的输入是abc,我的结果应该是123
如果我的输入是cba,我的结果应该是321
等等…
到目前为止,如果字符串只有一个字符,那么使用下面的代码就可以了。如果我输入两个字符,它就不返回任何内容。
1 2 3 4 5 | dataInput=input("Enter stuff:") for key,value in dataDict.items(): if dataInput == key: print(value) |
我怎样才能得到我想要的结果呢?
你不应该为了找到匹配的键而在听写机上循环,这是非常低效的。dict是用来快速查找的:你给它键,它给你值。例如,
另外,正如Tim Pietzcker提到的,只有当
这里有一个简单的方法来完成所需的转换。我们在一个列表理解中进行查找,它创建一个转换值列表,然后将该列表传递给
1 2 3 4 5 6 7 8 9 10 | data_dict = { "a":"1", "b":"2", "c":"3", } data_input ="aabbccba" s = ''.join([data_dict[c] for c in data_input]) print(s) |
输出
1 | 11223321 |
但是,这并不安全:如果
1 2 3 | data_input ="aaxbbcycbaz" s = ''.join([data_dict.get(c, '') for c in data_input]) print(s) |
输出
1 | 11223321 |
或者,我们可以将坏数据转换为一些特殊值,例如0。
1 2 3 | data_input ="aaxbbcycbaz" s = ''.join([data_dict.get(c, '0') for c in data_input]) print(s) |
输出
1 | 11022303210 |
只是为了好玩,这里有一个"功能性"版本。吉多可能不赞成这个。:)
1 2 3 | data_input ="aaxbbcycbaz" print(''.join(filter(None, map(data_dict.get, data_input)))) 11223321 |
您应该迭代输入字符串,而不是字典。另外,如果用户输入的字符不在字典中,您可能希望使用
1 2 | for letter in dataInput: print(dataDict.get(letter,"X")) |
这将把每个字母打印在其单独的行上。如果要以单行方式打印,可以将
您所做的比较永远不会奏效(在第一次迭代中,它相当于
你在重复错误的事情。您应该迭代输入。你不需要重复听写,因为你可以通过键查找。