我有一个看起来像这样的字典
my_dictionary={
("today is", "tomorrow"): 1.34,
("tomorrow", "today is"):2.6}
etc
我试图这样做,以便如果用户想要更改任何这些值的值,他们就可以。
早些时候在该计划中:
value= my_dictionary[item_1, item_2}
我尝试使用此
def new():
global choice
global change
choice=input("Would you like to change a value?")
if choice=="yes":
change=input("Which terms?")
if change in my_dictionary:
value=float(input("Enter value: "))
my_dictionary[change]=value
else:
print("Term doesn't exist.")
但这不起作用。我直接指出术语不存在' 我从未编写任何替换,追加,删除字典中任何内容的内容。 如果有人有任何想法我会非常感激。 谢谢。
所以它是: 你想改变价值吗?是 今天是哪个条款?明天 术语不存在。
无论使用和不使用逗号都会发生这种情况 即使我只输入一个项目仍然没有工作 - 它只是转移到程序的下一部分。 我需要专门更改两个术语的值,因此必须按正确的顺序输入它们。
答案 0 :(得分:1)
字典基本上总是以这种方式构建:
my_dict = {
key: value,
key: value,
key: value... #etc, etc
}
...其中每个'key'是不同的变量。 “价值”不一定是不同的,尽管它们通常都是不同的。
只需输入以下内容即可添加或修改字典键值对:
my_dict[key] = value
...其中'key'是'first'变量,'value'是第二个。
但是,如果您要使用元组作为密钥,则搜索密钥需要完全匹配。如果您有一个具有以下结构的字典:
my_dict = {
('one', 'key'):value,
('two', 'key'):other_value,
....etc.....
}
...并且您尝试说if 'one' in my_dict
,它将返回False
,因为您没有使用被用作密钥的确切项目。您可以使用if ('one', 'key') in my_dict
之类的语法来匹配完全键。
答案 1 :(得分:0)
您从change
获得的input
是一个字符串,而您字典的键是元组。
您可以使用ast.literal_eval()
将字符串转换为元组;
Python 2.7.6 (default, Mar 31 2014, 00:17:41)
Type "help", "copyright", "credits" or "license" for more information.
>>> import ast
>>> ast.literal_eval("('a', 'b')")
('a', 'b')
或者您可以拆分字符串:
>>> tuple('a, b'.split(','))
('a', ' b')
答案 2 :(得分:0)
如果您希望用户输入“今天是,明天”,如您在评论中所述,则您的代码无法处理它。
字典中的键是元组,其中用户输入始终是字符串。您必须将用户输入转换为元组。
你这样做:
change=input("Which terms?")
change_list = change.split(',')
change_list = [a.strip() for a in change_list]
change_tuple = tuple(change_list)
现在检查字典中是否有change_tuple
:
if change_tuple in my_dictionary:
其余代码似乎没问题。
答案 3 :(得分:0)
这本字典中的密钥是一个元组。因此,如果要更改字典中的值,则需要输入元组。
choice=raw_input("Would you like to change a value?")
if choice=="yes":
change=input("Which terms?")
if change in my_dictionary:
value=float(input("Enter value: "))
my_dictionary[change]=value
else:
print("Term doesn't exist.")
运行此代码并输入正确的键值的结果:
Would you like to change a value?yes
Which terms?("today is", "tomorrow")
Enter value: 1.35