Python / JSON,当您从嵌套字典中获取键时,在字典中获取值?

时间:2020-04-24 15:54:16

标签: python json

我终于开始学习Python,并完成了我的第一本Udemy课程,并开始了我的项目。我尝试搜索论坛,但无法真正直接找到答案。

我有一个以JSON格式向员工数据库发送API的请求,该请求简化如下:

"Employees": {
"Arny Arnoldsen": {
    "Employee_ID" : "0001",
    "Title" : "Accounts Manager",
    "Address 1" : "Cheery road 3",
    "Address 2" : "Georgia"
    },

"Burt Burtsen": {
    "Employee_ID" : "0002",
    "Title" : "Sales Manager",
    "Address 1" : "Destiny street 23",
    "Address 2" : "Las Vegas"
    },
"Carl Carlsen": {
    "Employee_ID" : "0003",
    "Title" : "Operational Manager",
    "Address 1" : "Sunshine road 42",
    "Address 2" : "Miami"
    }
}

要获取我的雇员列表,我只需使用

for employee in employees: 
  print(employee)

当我想使用Employee_ID搜索员工时,出现第二个问题。由于GDPR等原因,我没有得到任何名字,但可能有f.eks。 “ Employee_ID” 0002,我需要返回Burt Burtsen。

我可以“查看”字典和列表,但似乎不知道该怎么做。我希望这里的人可以提供帮助:)

2 个答案:

答案 0 :(得分:0)

data = {"Employees": {
"Arny Arnoldsen": {
    "Employee_ID" : "0001",
    "Title" : "Accounts Manager",
    "Address 1" : "Cheery road 3",
    "Address 2" : "Georgia"
    },

"Burt Burtsen": {
    "Employee_ID" : "0002",
    "Title" : "Sales Manager",
    "Address 1" : "Destiny street 23",
    "Address 2" : "Las Vegas"
    },
"Carl Carlsen": {
    "Employee_ID" : "0003",
    "Title" : "Operational Manager",
    "Address 1" : "Sunshine road 42",
    "Address 2" : "Miami"
    }
   }
}

for emp in data["Employees"]:
    if data["Employees"][emp]["Employee_ID"] == "0002": 
        print(emp)

运行dict的foreach循环时,您将获得每个键作为迭代变量。员工姓名是您数据结构中的关键。

答案 1 :(得分:0)

一种简单的方法是:

d = {
    "Employees": {
        "Arny Arnoldsen": {
            "Employee_ID" : "0001",
            "Title" : "Accounts Manager",
            "Address 1" : "Cheery road 3",
            "Address 2" : "Georgia"
        },

        "Burt Burtsen": {
            "Employee_ID" : "0002",
            "Title" : "Sales Manager",
            "Address 1" : "Destiny street 23",
            "Address 2" : "Las Vegas"
        },
        "Carl Carlsen": {
            "Employee_ID" : "0003",
            "Title" : "Operational Manager",
            "Address 1" : "Sunshine road 42",
            "Address 2" : "Miami"
        }
    }
}

def find_emp(d, query):
    for k,v in d['Employees'].items():
        if v.get("Employee_ID") == query:
            return k

emp_name = find_emp(d, "0003")
# Carl Carlsen

Demo