从面向记录的字典创建嵌套对象

时间:2020-02-17 23:20:42

标签: python-3.x pandas

我有以下数据框:

[{'Name': 'foo', 'Description': 'foobar', 'Value': '5'}, {'Name': 'baz', 'Description': 'foobaz', 'Value': '4'}, {'Name': 'bar', 'Description': 'foofoo', 'Value': '8'}]

我想创建两个嵌套类别。一个类别用于NameDescription键,另一种类别用于Value键。一个对象的输出示例:

{'details': {'Name': 'foo', 'Description': 'foobar'}, 'stats': { 'Value': '5' }} 

到目前为止,我只能通过“手动”加入每个项目来实现。我很确定这不是正确的解决方案。

2 个答案:

答案 0 :(得分:0)

这是一种解决方案:

data = [{'Name': 'foo', 'Description': 'foobar', 'Value': '5'}, {'Name': 'baz', 'Description': 'foobaz', 'Value': '4'}, {'Name': 'bar', 'Description': 'foofoo', 'Value': '8'}]
df = pd.DataFrame(data)

m = df.to_dict('records')

stats = [{'stats':i.popitem()}  for i in m]

details = [{'details':i} for i in m]

g = list(zip(details,stats))

print(*g)

({'details': {'Name': 'foo', 'Description': 'foobar'}}, {'stats': ('Value', '5')}) ({'details': {'Name': 'baz', 'Description': 'foobaz'}}, {'stats': ('Value', '4')}) ({'details': {'Name': 'bar', 'Description': 'foofoo'}}, {'stats': ('Value', '8')})

这里的主要功能是popitem(),它会破坏性地从字典中取出一对。

答案 1 :(得分:0)

使用列表理解:

from json import dump

result = [{
    'details': {col: row[col] for col in ['Name', 'Description']},
    'stat': {col: row[col] for col in ['Value']}
} for row in df.to_dict(orient='records')]

# Write to file
with open('result.json', 'w') as f:
    dump(result, f)