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

时间:2018-08-20 13:03:51

标签: python python-3.x

很抱歉,如果不太清楚,请创建一个程序来计算公式,并使用存储在嵌套字典中的一个变量的分类值。我希望用户能够像这样从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: ""}, }

3 个答案:

答案 0 :(得分:1)

将行更改:将if y in x:更改为if y in materials[x]:,您需要检查y是否符合x的要求。 y in x检查y是否是x的一部分

答案 1 :(得分:0)

尝试一下:

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,则您都需要调用它们。由于输入通常返回字符串。

答案 2 :(得分:0)

您应该使用raw_input()而不是input()

input()会将输入评估为python代码,而raw_input()将返回一个字符串。

此外,正如@DanielMesejo在回答中提到的那样,条件y in 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

这不起作用,因为仪表索引是一个整数,而不是字符串。 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