将嵌套dict的值赋给python中的列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将嵌套dict的值赋给python中的列表相关的知识,希望对你有一定的参考价值。
我有一个JSON对象列表的文件。它看起来像这样:
[
{
"id": 748,
"location": {
"slug": "istanbul",
"parent": {
"id": 442,
"slug": "turkey"
}
},
"rank": 110
},
{
"id": 769,
"location": {
"slug": "dubai",
"parent": {
"id": 473,
"slug": "uae"
}
},
"rank": 24
}
]
我想创建一个酒店父名称列表,所以我写这个代码来做这个,我读了JSON文件并将其分配给一个变量,那部分是正确的。但看看这段代码:
with open('hotels.json', 'r', encoding="utf8") as hotels_data:
hotels = json.load(hotels_data)
parents_list = []
for item in hotels:
if item["location"]["parent"]["slug"] not in parents_list:
parents_list.append(item["location"]["parent"])
当我运行此代码时,我给出了这个错误:
if item["location"]["parent"]["slug"] not in parents_list:
TypeError: 'NoneType' object is not subscriptable
这段代码不起作用,所以我试着打印JSON对象,所以我在循环中写了这个:
print(item["location"]["parent"]["slug"])
此代码打印我想要的值,但也给我完全相同的错误。感谢您的任何帮助。
答案
我尝试运行代码,它似乎与您的数据集正常工作。
但是,我只是为您的数据集hotels = [...]
指定了酒店,而不是打开文件来读取数据。
我得到的结果是这样的:
[{'id': 442, 'slug': 'turkey'}, {'id': 473, 'slug': 'uae'}]
如果你打印hotels
你的结果是什么,它和你在这里显示的一样吗?
如果您的数据集中实际上有更多数据,那么我可以假设某些词典不包含item["location"]["parent"]["slug"]
。如果是这种情况,你应该跳过这些,通过在从item
读取之前先检查每个parents_list
中是否存在该元素。
例如:
try:
item["location"]["parent"]["slug"]
except (KeyError, TypeError) as e:
pass
else:
if item["location"]["parent"]["slug"] not in parents_list:
parents_list.append(item["location"]["parent"])
另一答案
我不能像你一样复制同样的错误。我唯一能想到的是JSON中每个对象中的最后一项不应该有逗号。看看是否能解决您的错误
以上是关于将嵌套dict的值赋给python中的列表的主要内容,如果未能解决你的问题,请参考以下文章