簡體   English   中英

如何以 pythonic 方式將原始 json 轉換為所需格式

[英]How to convert raw json to required format in pythonic way

我有來自某些服務的 json ,其中每個值都是不同的行。

輸入示例:

[
    {'author': 'alf', 'topic': 'topic1', 'lang': 'ge', 'value': 11},
    {'author': 'alf', 'topic': 'topic1', 'lang': 'ge', 'value': 22},
    {'author': 'bob', 'topic': 'topic1', 'lang': 'ge', 'value': 33},
    {'author': 'bob', 'topic': 'topic1', 'lang': 'ge', 'value': 44},
    {'author': 'alf', 'topic': 'topic1', 'lang': 'fr', 'value': 99},
    {'author': 'alf', 'topic': 'topic2', 'lang': 'ge', 'value': -20},
]

Output 示例:

{
    'alf': {
        'topic1': [
            {'ge': [11, 22]},
            {'fr': [99]}
        ],
        'topic2': [
            {'ge': [-20]}
        ]
    },
    'bob': {
        'topic1': [
            {'ge': [33, 44]}
        ]
    }
}

所以基本上這是通過將指定鍵分組以將所有值收集到一個數組中的簡單轉換。

如果缺少所需的密鑰,我通過檢查和創建所需的密鑰來完成此轉換:

for entry in self._raw_data:
  parsed = {}
  author = entry["author"]
  topic = entry["topic"]
  lang = entry["lang"]
  value = entry["value"]
  if not parsed.get(author):
    parsed[author] = {}
  if not parsed[author].get(topic):
    parsed[author][topic] = []
  #etc

我敢肯定,這可以以更透明的方式完成。 任何人都可以推薦一些東西嗎?

如果您願意將"topic"的值的類型從list更改為dict ,您可以使用.setdefault()

res = {}
for entry in raw_data:
    res.setdefault(entry['author'], {}).setdefault(entry["topic"], {}).setdefault(entry["lang"], []).append(entry["value"])

OUTPUT:

{
    "alf": {
        "topic1": {
            "fr": [99],
            "ge": [11, 22]
        },
        "topic2": {
            "ge": [-20]
        }
    },
    "bob": {
        "topic1": {
            "ge": [33, 44]
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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