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有两个参数:employeesdictionary和orient。orient=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