能否通过用户输入引用一个字典名称?

问题描述 投票:-1回答:2

我希望我的用户能够在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。

python python-3.x
2个回答
1
投票

我这个最好的方法是这样做的。

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
    }
}

1
投票

正如其他用户所建议的,你可能不需要这样做。应用程序的内部结构(包括变量名)不应该暴露给用户。


你可以使用 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

0
投票

你也可以使用:

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")

演示

© www.soinside.com 2019 - 2024. All rights reserved.