繁体   English   中英

如何使用用户输入从嵌套字典中提取值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM