簡體   English   中英

遍歷 json 文件的 Pythonic 方式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM