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)
我怎样才能得到我想要的结果呢?
dataInput是否始终包含所有值,或者"12"是否也可以?
"".join(a.get(key,"") for key in w)
你不应该为了找到匹配的键而在听写机上循环,这是非常低效的。dict是用来快速查找的:你给它键,它给你值。例如,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
只是为了好玩,这里有一个"功能性"版本。吉多可能不赞成这个。:)
data_input ="aaxbbcycbaz"
print(''.join(filter(None, map(data_dict.get, data_input))))
11223321
为了完整性,也许还可以演示如何使用map()?
@三倍是的,好的。;)
在我可以测试的地方没有,但是来自filter的输出不是一个可以传递给print的可选项吗?
@三倍好吧,我想你可以做一次。但OP可能需要实际的字符串。
您应该迭代输入字符串,而不是字典。另外,如果用户输入的字符不在字典中,您可能希望使用.get():
for letter in dataInput:
print(dataDict.get(letter,"X"))
这将把每个字母打印在其单独的行上。如果要以单行方式打印,可以将end=""参数添加到print函数中(完成后打印空行)。
您所做的比较永远不会奏效(在第一次迭代中,它相当于if"abc" =="a",我希望这一点很明显)。
你在重复错误的事情。您应该迭代输入。你不需要重复听写,因为你可以通过键查找。