将输入映射到字典值

时间:2020-09-23 10:12:57

标签: python python-3.x

我正在构建的脚本的一部分要求我将用户输入映射到列表(可能的输入),然后将其与字典中的键(结果)相关联。我已经设法获得结果,但是我想知道是否有更好的方法可以解决这个问题?

user_input = "bought"
output = None

input_mapping = {"buy": ["bought", "buys", "purchased"],
                 "sell": ["sold", "sells", "sale"]}

for key, values in input_mapping.items():
    if user_input in values:
        output = key

print(output)

输入/输出:

user_input = "sale"
>>> sell

user_input = "bought"
>>> buy

非常感谢!

3 个答案:

答案 0 :(得分:2)

在这种情况下,保留反向字典将产生最佳性能。 搜索字典非常好,而您的方法需要搜索整个数据。

我会建立一个简单的反向字典并使用它:

reversed_dictionary = {item[0]: item[1] for sublist in [[(v,k) for v in input_mapping[k]] for k in input_mapping.keys()] for item in sublist}

答案 1 :(得分:1)

让多个键指向同一个值似乎更为多余, 但是从性能方面来说,在字典O(1)上查找键比在列表O(N)上查找键更有效。

input_mapping = {
  "bought": "buy",
  "buys": "buy",
  "purchased": "buy",
  "sold": "sell",
  "sells": "sell",
  "sale": "sell"
}

user_input = "bought"
output = input_mapping[user_input]
print(output)

代码输出:

buy

答案 2 :(得分:1)

您应该反转映射,从输出-> [输入]到输入->输出映射:

mapping = {
  "bought": "buy", "buys": "buy", "purchased": "buy", "sold": "sell", "sells": "sell",
  "sale": "sell"}
output = mapping[input]

那将更快,更直观。如果数据真的很大,我希望您选择解决方案。这是一个权衡。