Python 如何从列表中的值、json文件中找到密钥?

Python 如何从列表中的值、json文件中找到密钥?,python,json,Python,Json,我的解决方案如下,但这是我的问题 我有一个json,它将学校的位置与其关联的学校代码配对。不同的学校代码可能适用于同一地点 data = [ { "location": "New York", "school-code": "CITYA", "school-code-2": "NYU", "school-code-3"

我的解决方案如下,但这是我的问题

我有一个json,它将学校的位置与其关联的
学校代码
配对。不同的学校代码可能适用于同一地点

data = [
   {
    "location": "New York",
    "school-code": "CITYA", 
    "school-code-2": "NYU", 
    "school-code-3": "CityU"
    },
   {
    "location": "New Jersey",
    "school-code": "NJU", 
    "school-code-2": "BOU2", 
    "school-code-3": "NJUE"
   },
   {
    "location": "California",
    "school-code": "CAL",
    "school-code-2": "Cal2"
   },
   {
    "location": "Florida",
    "school-code": "fNJU", 
    "school-code-2": "fNJU2", 
    "school-code-3": "fNJUE"
   }
    ]
如果用户输入“CityU”,如何获取位置。它应该给出纽约的位置

code_input = "CityU" 
print("Your school zone is",location)
output: Your school zone is New York
仅当
学校代码
与用户输入之间存在精确匹配时,它才适用于以下代码:

code_input = 'CityU'
school_code = code_input

for i in data:
    if i['school-code-3'] == school_code:
        print(i['location'])

        break

我想知道,无论用户输入什么学校代码,它都会给出该条目的位置。

这可以使用
next
和简单的生成器理解来完成:

next(d['location'] for d in schools if code_input in d['school-code'])
如果没有匹配项,这将引发错误。如果不需要,则可以提供默认返回值:

next((d['location'] for d in schools if code_input in d['school-code']), None)
试试这个-

code_input = 'CityU'
l = [i['location'] for i in schools if code_input in i['school-code']][0]
print("Your school zone is",l)

笨重,但这就是我最后做的,不确定这能坚持多久

given_school_code = input("What is your school code? ")

# save the answer to a variable


print(" you entered school code: ", given_school_code)
data = [
       {
        "location": "New York",
        "school-code": "CITY", 
        "school-code-2": "NYU", 
        "school-code-3": "CityU"
        },
       {
        "location": "New Jersey",
        "school-code": "NJU", 
        "school-code-2": "NJU2", 
        "school-code-3": "NJUE"
       },
       {
        "location": "California",
        "school-code": "CAL",
        "school-code-2": "Cal2"
       },
       {
        "location": "Florida",
        "school-code": "fNJU", 
        "school-code-2": "fNJU2", 
        "school-code-3": "fNJUE"
       }
      
    
    ] 


school_code = given_school_code

for i in data:
    try:
        if (school_code == i['school-code']) or (school_code == i['school-code-2']) or  (school_code == i['school-code-3'])  or  (school_code == i['school-code-4']):
            # print(i['location'])
            new_loc = (i['location'])
            print("Your School Zone is", new_loc)
            break
        else:
            print("ah")
    except:
        pass

如果我能摆脱所有那些
语句,那就太好了。

请从下面重复[关于主题]()和[如何提问]()。许多教程和其他参考资料介绍了如何遍历列表、访问dict条目以及将该值与另一个值进行比较。我们希望您使用这些资源,尝试代码。。。如果你被卡住了,就把问题代码贴出来。“如何实现此功能”通常是离题的。添加了更多信息以供澄清。是的,您澄清了您尚未查找如何迭代dict。您声明不知道如何将列表转换为元组——这是另一个微不足道的查找。我们不知道是什么阻止你实现你想要的结果。你似乎在寻找一种制作反向词典的方法。。。您可以使用的另一个搜索词。提示您可能会遇到问题:要创建反向词典,当列表中有多个代码时,您可能需要创建多个条目。这意味着您需要遍历该列表。还要注意,您的dict不是唯一可逆的:
GOA
映射到CA和NJ。有趣。。我不知道next()可以这样使用。。非常感谢。
given_school_code = input("What is your school code? ")

# save the answer to a variable


print(" you entered school code: ", given_school_code)
data = [
       {
        "location": "New York",
        "school-code": "CITY", 
        "school-code-2": "NYU", 
        "school-code-3": "CityU"
        },
       {
        "location": "New Jersey",
        "school-code": "NJU", 
        "school-code-2": "NJU2", 
        "school-code-3": "NJUE"
       },
       {
        "location": "California",
        "school-code": "CAL",
        "school-code-2": "Cal2"
       },
       {
        "location": "Florida",
        "school-code": "fNJU", 
        "school-code-2": "fNJU2", 
        "school-code-3": "fNJUE"
       }
      
    
    ] 


school_code = given_school_code

for i in data:
    try:
        if (school_code == i['school-code']) or (school_code == i['school-code-2']) or  (school_code == i['school-code-3'])  or  (school_code == i['school-code-4']):
            # print(i['location'])
            new_loc = (i['location'])
            print("Your School Zone is", new_loc)
            break
        else:
            print("ah")
    except:
        pass