将字典结构转换为另一个

Convert a dictionary structure to another

我有以下形式的字典:

data = {
        "name": [
            "Robin_lodging_Dorthy",
            "Robin_lodging_Phillip"
        ],
        "color": [
            "#FF0000",
            "#FF0000"
        ],
        "data": [
            [
                33.55833333333333,
                32.887499999999996,
                33.15416666666666
            ],
            [
                51.987500000000004,
                52.07916666666667,
                51.45416666666667
            ]       
        ]
    }

我想将字典转换为以下形式:

{'lines': [
           {'name': 'Robin_lodging_Dorthy'},
           {'color': '#FF0000'},
           {'data': [33.55833333333333,
                     32.887499999999996,
                     33.15416666666666]},

           {'name': 'Robin_lodging_Phillip'},
           {'color': '#FF0000'},
           {'data': [51.987500000000004,
                     52.07916666666667,
                     51.4541666666666]}]}

我是这样做的,但是是错误的做法:

formatted_data = []
for key in data.keys():
    for value in data[key]:
        temp = {}
        temp[key] = value
    formatted_data.append(temp)
{'lines': formatted_data}

知道如何处理它吗?

一点点列表和字典理解就可以了:

data_tf = [{k:v[i] for k, v in data.items()} for i in range(len(list(data.values())[0]))]

你需要找出你需要多少字典来分割你的数据,然后你只需在列表中构造新的字典,从每个 k:v 对的每个值中获取 i-th 元素。

编辑:同样的事情使用明确的循环,更接近你最初的尝试:

data_tf = []
for i in range(len(list(data.values())[0])):
    d = {}
    for k, v in data.items():
        d[k] = v[i]
    data_tf.append(d)

这会生成一个列表,但您可以轻松地将其包装成字典。

您可以使用内置函数 zip 来组合字典值。然后可以通过 zip'ping data 的键和新获得的“行”来创建单独的字典:

result = [dict(zip(data.keys(), v)) for v in zip(*data.values())]