我希望我的用户能够在IDLE之外编辑一个字典值,通过输入它的名称和一个值。
我的不成功的代码简化了。
input = ("Input dictionary name")
[USER HAS INPUT "exampleDictionary"]
newValue = ("Input new value")
[USER HAS INPUT 5]
exampleDictionary = {
"value1": 20,
"value2": 35
}
input["value1"] = newValue
理想情况下,这将会把exampleDictionary的 "value1 "改为5。
我这个最好的方法是这样做的。
dict_list = {
"exampleDictionary" : {
"value1": 20,
"value2": 35
}
}
input = ("Input dictionary name")
[USER HAS INPUT "exampleDictionary"]
newValue = ("Input new value")
[USER HAS INPUT 5]
dict_list[input]["value1"] = newValue
print(dict_list)
输出。
{
"exampleDictionary" : {
"value1": 5,
"value2": 35
}
}
正如其他用户所建议的,你可能不需要这样做。应用程序的内部结构(包括变量名)不应该暴露给用户。
你可以使用 eval
方法。它可以让程序在程序本身内部运行代码。
exampleDictionary = {"value1": 20,"value2": 35}
input1 = "exampleDictionary"
input2 = 5
d = eval(input1)
d["value1"] = input2
print(d["value1"])
# 5
但请注意,使用 eval
被认为是 坏的 练习。所以,你可以使用以下代码从当前模块中获取变量,并更新它的值。
import sys
thismodule = sys.modules[__name__]
d = thismodule.__getattribute__(input1)
d["value1"] = input2
print(d["value1"])
# 5
你也可以使用:
master_dict = {
"my_dict" : { "value1": 20, "value2": 35}
}
dict_n = input("Input dictionary name:\n") # my_dict
if dict_n in master_dict: # check if dict exists
dict_n = master_dict[dict_n]
key_n = input("Input key name:\n") # value1, value2
if key_n in dict_n:
new_v = input("Input new value:\n")
dict_n[key_n] = new_v
print(f"Key {key_n} updated with value {new_v}")
print(dict_n)
else:
print(f"key {key_n} doesn't exit")
else:
print(f"dict {dict_n} doesn't exit")