我正在构建的脚本的一部分要求我将用户输入映射到列表(可能的输入),然后将其与字典中的键(结果)相关联。我已经设法获得结果,但是我想知道是否有更好的方法可以解决这个问题?
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
非常感谢!
答案 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]
那将更快,更直观。如果数据真的很大,我希望您选择解决方案。这是一个权衡。