【问题标题】:convert a list of dicts to a dict of dicts python3将字典列表转换为字典 python3
【发布时间】:2019-05-20 12:18:01
【问题描述】:

我有一个看起来像这样的字典列表

a = [{'name': 'analyst21', 'id': 1, 'data': 'the process data3'}, {'name': 'analyst2', 'id': 2, 'data': 'process data2'}, {'name': 'analyst3', 'id': 3, 'data': 'process data3'}]

我想把它转换成字典的字典

需要的输出:

a = {{'name': 'analyst21', 'id': 1, 'data': 'the process data3'}, {'name': 'analyst2', 'id': 2, 'data': 'process data2'}, {'name': 'analyst3', 'id': 3, 'data': 'process data3'}}

我知道 dict 需要键值对。是否有任何其他方式使其成为可能。是我的问题是错的。得到了一些反对票。我只想将列表数据包含在此 {} 中。我将这些结果用于进一步处理。

【问题讨论】:

  • 第二个代码块中的文字不是字典。 {a:b, c:d} 是一个字典。 {e,f,g,h} 是一个集合。你想要一个字典还是一个集合?如果你仍然确定你想要一个 dict,那么键应该是什么?
  • 字典有键。输出中的外部结构没有键,因此不是字典。
  • 你不能拥有 dict 的 dict,因为 dict 是可变的,不能用作 dict 键
  • 是的,我知道。我需要一个键值对。但是,有没有其他方法可以使它成为可能

标签: python python-3.x list dictionary for-loop


【解决方案1】:

Python 字典is key-value structure。您所需的输出不是 dict - dict 必须 同时具有键和相应的值(或为空)。如果要将字典列表转换为字典的字典,则应选择某种可散列键(请注意,字典本身不可散列,因此不能将普通字典用作键!)并将它们用作字典键.以下是如何做到这一点的示例:

a = [{'name': 'analyst21', 'id': 1, 'data': 'the process data3'},
     {'name': 'analyst2', 'id': 2, 'data': 'process data2'},
     {'name': 'analyst3', 'id': 3, 'data': 'process data3'}]

b = {d['name']: d for d in a}
b

会给你一个字典:

{'analyst2': {'data': 'process data2', 'id': 2, 'name': 'analyst2'},
 'analyst21': {'data': 'the process data3', 'id': 1, 'name': 'analyst21'},
 'analyst3': {'data': 'process data3', 'id': 3, 'name': 'analyst3'}}

【讨论】: