1)在我的程序中,我首先提示用户输入。
2)然后我想循环遍历用户输入以获取该字符串中的所有字符,根据字典键单独查询每个字符。
3)如果输入中的字符与字典中的键匹配,我希望返回该键的值。
4) 需要对每个字符重复此操作,结果应打印字符串中返回的这些值
为了尝试进一步解释,这是我的字典:
dataDict = {
"a":"1",
"b":"2",
"c":"3",
}
例如:
如果我的输入是 abc,我的结果应该是 123
如果我的输入是cba,我的结果应该是321
等等...
到目前为止,如果字符串只有一个字符,使用下面的代码就可以了。 如果我输入两个字符,它不会返回任何内容。
dataInput=input("Enter stuff: ")
for key,value in dataDict.items():
if dataInput == key:
print(value)
如何才能达到我想要的结果?
最佳答案
您不应该循环遍历字典来查找匹配的键,这非常效率低下。字典被设计用来进行快速查找:你给它键,它给你值。例如,dataDict["a"]
结果为“1”。
此外,正如 Tim Pietzcker 提到的,只有当 dataInput
由单个字母组成时,if dataInput == key
才会起作用,因为它会比较整个 dataInput
字符串到 key
。
这是执行所需转换的简单方法。我们在列表理解中进行查找,这会创建转换值的列表,然后将该列表传递给 .join
以创建一个字符串。 (我已更改变量的名称以符合 PEP-008 风格指南)。
data_dict = {
"a": "1",
"b": "2",
"c": "3",
}
data_input = "aabbccba"
s = ''.join([data_dict[c] for c in data_input])
print(s)
输出
11223321
但是,这并不安全:如果 data_input
包含字典中不存在的字符,则会失败并显示 KeyError
。这是一个更好的方法:如果它得到一个坏字符,它会添加一个空字符串。
data_input = "aaxbbcycbaz"
s = ''.join([data_dict.get(c, '') for c in data_input])
print(s)
输出
11223321
或者,我们可以将坏数据转换为一些特殊值,例如 0。
data_input = "aaxbbcycbaz"
s = ''.join([data_dict.get(c, '0') for c in data_input])
print(s)
输出
11022303210
只是为了好玩,这里有一个“功能”版本。 Guido 可能不会同意这一点。 :)
data_input = "aaxbbcycbaz"
print(''.join(filter(None, map(data_dict.get, data_input))))
11223321
关于python - 循环遍历字典键以根据输入获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47726643/