[英]Pythonic way to iterate through json file
我有一個 .json 文件,它具有類似這樣的結構:
{
"cars": [
{
"FIAT": [
{"model_id": 153},
{"model_id": 194}
]
},
{
"AUDI": [
{"model_id": 261}
]
},
{
"BMW": [
{"model_id": 264}
]
}
]
}
我的最終目標是檢索以下內容:
{"model_id": 153},
{"model_id": 194},
{"model_id": 261},
{"model_id": 264}
目前我得到這個結果的代碼是這樣的:
for cars in dir['cars']:
for brand in cars:
for model in cars[brand]:
print(model)
我的問題是我們是否有更好的方法來訪問這些詳細信息? 我知道 itertools.product 是用來替換嵌套的 for 循環的,但是它可以應用在這種場景中嗎?
我認為這正是ijson試圖解決的問題,從 json 文件加載部分信息。
product
在這里沒有用,因為您沒有兩個獨立的列表來計算產品。 但是,您可以使用具有多個迭代器的列表推導
[x for c in d['cars'] for v in c.values() for x in v]
其中一個可以替換為在生成器表達式上運行的itertools.chain
:
list(chain.from_iterable(v for c in d['cars'] for v in c.values()))
這將根據 OP 的樣本數據起作用。 它隱含地假設“汽車”列表中的每個字典只有一個品牌的汽車(FIAT、AUDI、BMW 等):
J = {
"cars": [
{
"FIAT": [
{"model_id": 153},
{"model_id": 194}
]
},
{
"AUDI": [
{"model_id": 261}
]
},
{
"BMW": [
{"model_id": 264}
]
}
]
}
for car in J['cars']:
for m in car[list(car.keys())[0]]:
print(m)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.