python - KeyError 访问嵌套字典中的数据
问题描述
我有以下 Python 脚本:
lista_contatos = {
"1": {"nome": "Paul", "cel": "+9999999999", "cidade": "SP", "id_cidade": "449139"},
"2": {"nome": "Junior", "cel": "+999999999", "cidade": "SP", "id_cidade": "449139"}
}
n = len(lista_contatos)
i = int
i = 1
print(n)
while i <= n:
print(i)
print(lista_contatos[i]['nome'])
print(lista_contatos[i]['cel'])
i = i + 1
我面临的问题是我需要打印每个键的所有数据,然后再进行第二个数组打印。
问题是当我将计数器添加i
为打印键时,出现错误。
任何帮助如何解决这个问题?
解决方案
这种数据结构没有多大意义。如果您的键只是序列号并且您计划迭代元素,那么字典是错误的工具。列表(或tuples,如果需要不变性)是为您的预期目的而发明的,并且遍历连续的内存块比散列更有效且在语义上更合适。
此外,for
循环是遍历列表的正确结构,而不是while
循环,当停止条件不是计数器时,循环更合适。
lista_contatos = [
{"nome": "Paul", "cel": "+9999999999", "cidade": "SP", "id_cidade": "449139"},
{"nome": "Junior", "cel": "+999999999", "cidade": "SP", "id_cidade": "449139"}
]
for elem in lista_contatos:
print(elem['nome'], elem['cel'])
至于你原来的问题,因为整数是 dict 键的非法值,所以{"1": "foo"}[1]
产生你的KeyError
. 您需要将 转换i
为字符串,
lista_contatos[str(i)]['cel']
# ^^^^^^
这应该感觉就像跳过一个铁环,并且是一个危险信号,表明数据结构的选择出了问题。
这并不是说遍历字典不好,但它的工作方式是使用,或将字典转换为视图对象。如果您使用的是 Python < 3.6,则无法保证排序(使用 a )。在任何情况下,计数器都不会进入图片。some_dict.items()
some_dict.keys()
some_dict.values()
collections.OrderedDict
i
的意图i = int
可能是声明一个类型。但是这个别名int
,这是一个用于强制转换的内置类型,到变量i
。你不需要像这样在 Python 中声明类型;只需编写i = 1
,Python 就会自动知道它是一个整数:
>>> i = 1
>>> type(i)
<class 'int'>
什么时候真正使用字典?答案是每当您需要在键值对的基础上快速查找相关项目时,其中的键是一些唯一的、可散列的标识符,而不是来自0..n
. 想象一下产品库存,每个产品都有一些任意的 UPC 或 SKU 编号作为键,其余的产品数据作为属性的字典。
推荐阅读
- reactjs - 过滤 && 排序 ag-grid 后如何获取数据?
- arrays - 将 AnsiChar 数组转换为字符串:Delphi 10.3
- bash - 如何在 bash 中的复合命令之前放置重定向?
- spring-boot - CorsConfiguration.setMaxAge 在 SpringBoot 应用程序中不起作用
- python - 如何减少神经网络训练时间
- kubernetes - 为什么 Kubernetes Secret 既有键又有名称?
- xml - 引用的文件包含错误 (http://testng.org/testng-1.0.dtd)
- javascript - 出现错误 Module not found: Error: Can't resolve '../components/***' when webpack build, 我该如何解决这个问题?
- excel - 如何在没有代码的情况下将我为整列记录的宏运行到另一列?
- python - 如何使用 Kubernetes Python API 获取集群信息?