【问题标题】:How to transform a python dictionary to a desired format如何将 python 字典转换为所需的格式
【发布时间】:2018-12-24 10:52:00
【问题描述】:

我有以下字典,我在 pandas 数据帧上应用 to_dict() 方法时得到的。

{
   'name' : {
      0: 'abc',
      1: 'xyz'
    },
   'email': {
     0: 'abc@abc.com',
     1: 'xyz@xyz.com',
   },
   'category': {
     0: 'category 1',
     1: 'category 2', 
   }
}

如何将其转换为以下结构?

[
  {
    'name': 'abc',
    'email' : 'abc@abc.com',
    'category': 'category 1',  
  },
  {
    'name': 'xyz',
    'email' : 'xyz@xyz.com',
    'category': 'category 2',  
  }
]

我尝试应用for 循环的许多变体,但作为虚假代码出现,如果有人可以提供帮助或指向一些链接,那就太好了,python 新手在这里 :|

编辑:将所需的结构更改为字典列表,因为字典不是哈希,

【问题讨论】:

  • 这似乎是一个很好的练习来了解更多关于 python 的知识!我建议尝试将数据拆分为一种您可以将其重建为所需格式的方式。因此,也许列出所有名称值、另一个电子邮件值和第三个类别值。组织好之后,获取名称、电子邮件和类别列表,并将它们转换为字典键:值对。也许这会帮助你完成任务。我只是在想我最初是如何尝试解决这个问题的。祝你好运!
  • 即使我也想这样做...谢谢@J0hn
  • 作为将来的注释,您通常应该包括您的尝试示例,即使它们失败了。大多数情况下,它可以帮助其他人产生好的答案。

标签: python python-3.x pandas for-loop


【解决方案1】:

您显示的目标结构是一组字典。由于 dicts 不可散列,因此无法创建。

相反,您可能想要一个字典列表。

result = [
     {k: yourdict[k][n] for k in yourdict} for n in sorted(yourdict['name'])
]

测试:

[
    {'category': 'category 1', 'email': 'abc@abc.com', 'name': 'abc'},
    {'category': 'category 2', 'email': 'xyz@xyz.com', 'name': 'xyz'}
]

【讨论】:

【解决方案2】:

您可以在将数据框转换为字典之前对其进行转置。这将生成一个字典字典,其中每个键都是来自原始数据帧的索引值。

import pandas as pd
pd.DataFrame({
   'name' : {
      0: 'abc',
      1: 'xyz'
     },
   'email': {
     0: 'abc@abc.com',
     1: 'xyz@xyz.com',
   },
   'category': {
     0: 'category 1',
     1: 'category 2', 
   }
}).T.to_dict()

输出:

{0: {'name': 'abc', 'email': 'abc@abc.com', 'category': 'category 1'},
 1: {'name': 'xyz', 'email': 'xyz@xyz.com', 'category': 'category 2'}}

【讨论】:

    【解决方案3】:

    您可以将'records' 作为所需方向传递给to_dict()

    df.to_dict('records')
    

    默认方向'dict' 产生类似于{column -> {index -> value}} 的输出,如您的示例所示,其中'records' 类似[{column -> value}, … , {column -> value}] 的列表,这是您想要的输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 2023-03-10
      • 1970-01-01
      • 2020-03-22
      • 2019-01-10
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多