循环遍历字典键以根据输入获取值

时间:2017-12-09 08:11:46

标签: python python-3.x dictionary

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)

我怎样才能实现我之后的结果?

3 个答案:

答案 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,因为您只需按键查找即可。