将字典结构转换为另一个
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())]
我有以下形式的字典:
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())]