如何将此 python 字典转换为其他字典格式?

FDL*_*FDL 1 python dictionary python-3.x

我有一本Python字典parsed_dict

{
    "Field name 1": {
        "item1": -0.05,
        "item2": -0.06,
        "item3": -0.07,
    },
    "Field name 2": {
        "item1": -0.01,
        "item2": -0.02,
        "item3": -0.03,
    },
    "Field name 3": {
        "item1": -0.05,
        "item2": -0.06,
        "item3": -0.07,
    }
}
Run Code Online (Sandbox Code Playgroud)

我想把它改造成另一本new_dict看起来像这样的字典;

{
    "fields": [
        {
            "key": "Field name 1",
            "label": "Field name 1",
            "sortable": true
        },
        {
            "key": "Field name 2",
            "label": "Field name 2",
            "sortable": true
        },
        {
            "key": "Field name 3",
            "label": "Field name 3",
            "sortable": true
        }
    ],
    "items": [
        {
            "item1": -0.05,
            "item2": -0.06,
            "item3": -0.07
        },
        {
            "item1": -0.01,
            "item2": -0.02,
            "item3": -0.03
        },
        {
            "item1": -0.05,
            "item2": -0.06,
            "item3": -0.07
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所做的。

new_dict = {}
for idx, key in enumerate(parsed_dict.keys()):
    new_dict['fields'][idx]['key'] = parsed_dict[key]
    new_dict['fields'][idx]['label'] = parsed_dict[key]
    new_dict['fields'][idx]['sortable'] = "true"
Run Code Online (Sandbox Code Playgroud)

我已经陷入这个阶段了。我得到的错误是KeyError: 'fields'.

我正在使用 python 3.9

Ctr*_*rlZ 5

可能有一种更优雅的方法来做到这一点,但我认为这在功能上是正确的:

newdict = {'fields': [{'key': fn, 'label': fn, 'sortable': True} for fn in parsed_dict],
           'items': [{'item1': v['item1'], 'item2': v['item2'], 'items3': v['item3']} for v in parsed_dict.values()]}
Run Code Online (Sandbox Code Playgroud)

编辑:

parsed_dict = {
    "Field name 1": {
        "item1": -0.05,
        "item2": -0.06,
        "item3": -0.07,
    },
    "Field name 2": {
        "item1": -0.01,
        "item2": -0.02,
        "item3": -0.03,
    },
    "Field name 3": {
        "item1": -0.05,
        "item2": -0.06,
        "item3": -0.07,
    }
}

newdict = {'fields': [{'key': fn, 'label': fn, 'sortable': True} for fn in parsed_dict], 'items': []}

for val in parsed_dict.values():
    newdict['items'].append({k: v for k, v in val.items()})
Run Code Online (Sandbox Code Playgroud)

这个答案的第一个版本相当无聊,并且可能难以阅读/理解。它还明确依赖于某些字段名称(item1、item2、item3)。这种逐步的方法(希望)更容易理解并且更灵活