我有一个这种形式的字典列表:
d_old=[{"color":"red","store":"1","s_d":{"M":"1","L":"2"}},
{"color":"blue","store":"2","s_d":{"S":"3","XL":"4"}}]
我的目标是将其转变为:
d_new=[{"color":"red","store":"1","Size":"M", "Stock":"1"},
{"color":"red","store":"1","Size":"L", "Stock":"2"},
{"color":"blue","store":"2","Size":"S", "Stock":"3"},
{"color":"blue","store":"2","Size":"XL", "Stock":"4"}]
我写了这个,它有效,但我想知道是否有更好的方法: 键总是在列表中定义,这里为了简单起见,只显示了 2 个键,还有更多。
def transform_data(d_old):
d_new_list =[]
headers=["color","store"]
for d in d_old:
for key,value in d["s_d"].items():
temp_dict = {header:d[header] for header in headers}
temp_dict["Size"] = key
temp_dict["Stock"] = value
d_new_list.append(temp_dict)
最佳答案
你可以使用嵌套的 list comprehension :
d_old = [{'color': 'red', 'store': '1', 's_d': {'M': '1', 'L': '2'}},
{'color': 'blue', 'store': '2', 's_d': {'S': '3', 'XL': '4'}}]
d_new = [{'color': item['color'], 'store': item['store'],
'size': size, 'stock': stock}
for item in d_old for size, stock in item['s_d'].items()]
如果您不想对按键进行硬编码:
d_new = [dict({key: values for key, values in item.items() if key != 's_d'},
size=size, stock=stock)
for item in d_old for size, stock in item['s_d'].items()]
关于python - 转换字典 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43520238/