【问题标题】:How to iterate through keys with index's in json? (Python)如何使用json中的索引遍历键? (Python)
【发布时间】:2021-09-01 20:40:16
【问题描述】:

我遇到了这个 json,我在使用 3[0].13[1].1 等键时遇到问题(字段重复分隔符 - HL7)。键 3.1 被分成两个以容纳另一个值。类似 3.4 和 3.5。

我想创建一个可扩展的程序,我可以在其中处理“字段”中的所有这些键:{}。

{
    "fields": {
        "0": "A",
        "3[0].1": "B",
        "3[0].5": "C",
        "3[1].1": "D",
        "3[1].4": "E",
        "3[1].5": "F",
        "5.1": "E",
        "5.2": "G",
        "7": "H",
        "8": "I",
        "18": "J"
    }
}

是否可以遍历这些值?我想把它转换成另一个输出

{
    "setId": 0,
    "fields": {
        "3.1": "B",
        "3.5": "C",
     }
},
{
    "setId": 1,
    "fields": {
        "3.1": "D",
        "3.4": "E",
        "3.5": "F",
     }
}

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 你尝试了什么?你的代码在哪里?

标签: python json dictionary key hl7-v2


【解决方案1】:

我相信它可以做得更简单

import json
from io import StringIO
a = """{
    "fields": {
        "0": "A",
        "3[0].1": "B",
        "3[0].5": "C",
        "3[1].1": "D",
        "3[1].4": "E",
        "3[1].5": "F",
        "5.1": "E",
        "5.2": "G",
        "7": "H",
        "8": "I",
        "18": "J"
    }
}"""

j = json.loads(a)
f = j["fields"]
set_ids = set([i[2] for i in f.keys() if i.startswith("3[")])

out = []

for set_id in set_ids:
    buf = {}
    buf["setId"] = set_id
    buf["fields"] = {}
    for x in filter(lambda x: x.startswith(f"3[{set_id}]"), f.keys()):
        buf["fields"][".".join([x[0], x[-1]])] = f[x]
    out.append(buf)

print(out)

哪些输出

[{'setId': '0', 'fields': {'3.1': 'B', '3.5': 'C'}}, {'setId': '1', 'fields': {'3.1': 'D', '3.4': 'E', '3.5': 'F'}}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2020-10-22
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多