关于python:遍历字典键以根据输入获取值

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是用来快速查找的:你给它键,它给你值。例如,dataDict["a"]产生"1"。

另外,正如Tim Pietzcker提到的,只有当dataInput由一个字母组成时,执行if dataInput == key才有效,因为它将整个dataInput字符串与key进行比较。

这里有一个简单的方法来完成所需的转换。我们在一个列表理解中进行查找,它创建一个转换值列表,然后将该列表传递给.join以创建一个字符串。(我已经更改了变量的名称以符合PEP-008样式指南)。

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

但是,这并不安全:如果data_input中包含字典中没有的字符,那么它将在KeyError中失败。这里有一个更好的方法:如果字符不好,它会添加一个空字符串。

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


您应该迭代输入字符串,而不是字典。另外,如果用户输入的字符不在字典中,您可能希望使用.get()

1
2
for letter in dataInput:
    print(dataDict.get(letter,"X"))

这将把每个字母打印在其单独的行上。如果要以单行方式打印,可以将end=""参数添加到print函数中(完成后打印空行)。

您所做的比较永远不会奏效(在第一次迭代中,它相当于if"abc" =="a",我希望这一点很明显)。


你在重复错误的事情。您应该迭代输入。你不需要重复听写,因为你可以通过键查找。