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)
我怎样才能实现我之后的结果?
答案 0 :(得分:2)
你不应该在字典上循环以找到匹配的密钥,这些非常效率低下。 dict旨在进行快速查找:您为其提供密钥并为您提供价值。例如,dataDict["a"]
会导致" 1"。
另外,正如Tim Pietzcker所提到的,只有当if dataInput == key
由一个字母组成时才会dataInput
,因为它会将整个dataInput
字符串与key
进行比较。 / p>
这是进行所需转化的简单方法。我们在列表推导中进行查找,创建转换值的列表,然后我们将该列表传递给.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
但是,这不安全:如果KeyError
包含字典中没有的字符,则data_input
会失败。这是一个更好的方法:如果它得到一个错误的字符,它会添加一个空字符串。
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
只是为了好玩,这里有一个&#34;功能性&#34;版。圭多可能不赞成这一个。 :)
data_input = "aaxbbcycbaz"
print(''.join(filter(None, map(data_dict.get, data_input))))
11223321
答案 1 :(得分:1)
你应该迭代输入字符串,而不是字典。此外,如果用户输入的字符不在字典中,您可能需要使用.get()
:
for letter in dataInput:
print(dataDict.get(letter,"X"))
这将在每行上打印每个字母。如果要将它们打印在一行中,可以将end=""
参数添加到print
函数中(并在完成后打印一个空行)。
您正在进行的比较将永远不会起作用(在第一次迭代中,它将等于if "abc" == "a"
,我希望这很明显。)
答案 2 :(得分:0)
你正在经历错误的事情。你应该迭代输入。您不需要遍历dict,因为您只需按键查找即可。