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

标签 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)

如何才能达到我想要的结果?

最佳答案

您不应该循环遍历字典来查找匹配的键,这非常效率低下。字典被设计用来进行快速查找:你给它键,它给你值。例如,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/

相关文章:

C# 字典与列表用法

python - 从另一个字典列表中减去字典列表中的值

python - 使用 python 2.x 读入并格式化文本文件

python - Pandas 在群体之间丢弃重复项

python - CloudFlare 抓取 403 禁止

python - 我在继承 res.partner 时得到了这个 "LINE 1: ...partner"."picking_warn_msg"作为 "picking_warn_msg","res_partn..."错误

python - 如何在 Python 中比较不同的列表并从字典中导出值?

python - 为什么 scikit-learn 会导致核心转储?

python - 函数内的变量

python - 如何从 __init__.py 导入应用程序以及为什么会收到此错误?