如何利用Python从一个嵌套的字典中获取数值

2,096 阅读3分钟

Python 嵌套字典是一个字典 ,其中嵌套着另一个或多个字典(字典的字典或集合的集合)。嵌套字典是表示结构化数据的一种方式 (类似于数据库的表关系)。这个概念的一个比喻是俄罗斯嵌套娃娃

我们的文章着重介绍从嵌套字典中检索数据的各种方法。

创建一个嵌套的字典

下面的代码创建了一个包含唯一id(1000,1001,等等)的字典。每个id都有一个相关的嵌套字典,包含与该id相关的信息(姓名、工作、薪水)。

employees = {1000: {'name': 'Derek', 'job': 'support', 'salary': 89567},
             1001: {'name': 'Alice', 'job': 'coder', 'salary': 94275},
             1002: {'name': 'Lucia', 'job': 'writer', 'salary': 76500},
             1003: {'name': 'Micah', 'job': 'trainer', 'salary': 81354},
             1004: {'name': 'Sarah', 'job': 'sales', 'salary': 64152}}

使用方括号访问嵌套值

从一个嵌套的字典(employees)中访问值的一种方法是在方括号内指定一个键。如果这个键不存在,就会出现一个KeyError,并显示出违规的键名。下面的代码访问并输出雇员1002的工资。

employees = {1000: {'name': 'Derek', 'job': 'support', 'salary': 89567},
             1001: {'name': 'Alice', 'job': 'coder', 'salary': 94275},
             1002: {'name': 'Lucia', 'job': 'writer', 'salary': 76500},
             1003: {'name': 'Micah', 'job': 'trainer', 'salary': 81354},
             1004: {'name': 'Sarah', 'job': 'sales', 'salary': 64152}}

result = employees[1002]['salary']
print(result)

输出

76500

使用get()访问值

另一种访问嵌套字典 (employees) 中的值的方法是使用dict.get() 方法。这个方法返回一个指定键的值。如果指定的键不存在,get() 方法返回None (防止KeyError)。下面的代码访问并输出雇员1003工作

employees = {1000: {'name': 'Derek', 'job': 'support', 'salary': 89567},
             1001: {'name': 'Alice', 'job': 'coder', 'salary': 94275},
             1002: {'name': 'Lucia', 'job': 'writer', 'salary': 76500},
             1003: {'name': 'Micah', 'job': 'trainer', 'salary': 81354},
             1004: {'name': 'Sarah', 'job': 'sales', 'salary': 64152}}

result = employees[1003].get('job')
print(result)

输出

trainer

使用For循环遍历一个嵌套的字典

下面是遍历一个嵌套字典的代码。

  • 第[1]行调用*for循环*,从顶层字典中引用id ,从嵌套字典中引用info ,并调用employees.items() ,检索相应的数据。
  • 第[2]行输出顶层字典中每条记录的id
  • 第[3]行为每个id ,循环浏览嵌套字典。
  • 第 [4] 行输出key:value对。

在这个例子中,只显示第一条记录。

for id, info in employees.items():
    print(id)
    for k in info:
        print(k, info[k])

输出 - 来自 Employees 的第一条记录。

1000
name Derek
job support
salary 89567

使用Pandas访问嵌套值

在这一节中,库将把嵌套的字典转换成 pandas 库将把嵌套的字典转换成一个DataFrame来访问数据。

  • 第[1]行导入库,并将其作为一个对象引用分配给pd
  • 第[2] 行创建了一个DataFrame,并将输出设置为df 。DataFrame有两个参数:employees dictionary和orientorient=index 参数迫使id 显示在最左边的一列。
  • 第[3]行开始循环迭代。这个语句重复进行,直到没有更多的行可以显示(df.iterrows())。变量i 输出id 的内容。变量j 输出与该id 相关的值。
import pandas as pd 
df = pd.DataFrame.from_dict(employees, orient='index')

for i, j in df.iterrows():
    print(i)
    print(j)

pandas数据框架。

      name      job         salary

输出 - 来自雇员的第一条记录。

1000
name        Derek        
job         support        
salary      89567        
Name: 1000, dtype: object