[英]How to pull values from a nested dictionary with user input
很抱歉,如果不太清楚,请创建一个程序来计算公式,并使用存储在嵌套字典中的一个变量的分类值。 我希望用户能够像这样从dict中提取值:
def get_value():
x = input("Material: ")
if x in materials:
y = input("Gauge: ")
if y in x:
return materials[x][y]
elif not (not (y is None) and not (y not in x)):
return 0
elif x not in materials or x is None:
return "Invalid Punch"
有什么特别的方法可以解决这个问题吗? 每次尝试运行它时,我都会得到一个Nonetype,将其设置为默认值0替换。
materials = {"ss": {22: "", 21: "", 20: "0.431", 19: "", 18: ""
,17: "", 16: "", 15: "", 14: ""
,13: "", 12: "", 11: "", 10: "", 9: "", 8: ""}, }
更改您的行: if y in x:
if y in materials[x]:
您需要检查y
是否在x
。 y in x
检查y
是否为x
一部分
尝试这个:
def get_value():
x = raw_input("Material: ")
if x in materials:
y = raw_input("Gauge: ")
if int(y) in materials[x]:
return materials[x][int(y)]
elif not (not (y is None) and not (y not in x)):
return 0
elif x not in materials or x is None:
return "Invalid Punch"
您的问题是y中的x都是字符串,如果material [x]中的y也将y转换为int,则它们都是字符串。 由于输入通常返回字符串。
您应该使用raw_input()而不是input() 。
input()
会将输入评估为python代码,而raw_input()
将返回字符串。
另外,正如@DanielMesejo在回答中提到的那样y in x
的条件y in x
无效,因为两者都是字符串。 您应该y in materials[x]
检查y in materials[x]
。
def get_value():
x = raw_input("Material: ")
if x in materials:
y = int(raw_input("Gauge: "))
if y in materials[x]:
return materials[x][y]
elif not (not (y is None) and not (y not in materials[x])):
return 0
elif x not in materials or x is None:
return "Invalid Punch"
print(get_value())
输出:
0
这是行不通的,因为仪表索引是int而不是字符串。 raw_input
返回一个字符串! 因此,我们需要进行类型转换:
def get_value():
x = raw_input("Material: ")
if x in materials:
y = int(raw_input("Gauge: ")) # Converting raw_input response to int
if y in materials[x]:
return materials[x][y]
elif not (not (y is None) and not (y not in materials[x])):
return 0
elif x not in materials or x is None:
return "Invalid Punch"
print(get_value())
输出:
0.431
您在第7行的表达式比所需的表达式复杂得多,因此我为您制作了一个更简单的函数:
def get_value():
material = raw_input("Material: ")
if not material or material not in materials:
return "Invalid Punch"
gauge = int(raw_input("Gauge: "))
if not gauge or gauge not in materials[material]:
return 0
return materials[material][gauge]
用法:
> python input.py
Material: ss
Gauge: 20
0.431
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.