我有一个字典项目列表如下:
[{'answer_type': 'Yes', 'answer__count': 5}, {'answer_type': 'No',
'answer__count': 3}, {'answer_type': 'Maybe', 'answer__count': 2}]
Run Code Online (Sandbox Code Playgroud)
我想将其转换为以下形式:
[{'Yes': 5}, {'No': 3}, {'Maybe': 2}]
Run Code Online (Sandbox Code Playgroud)
我知道我可以遍历字典,拉出我想要的项目并创建一个新字典,但我想知道是否有更优雅的方式.进行此转换的最有效方法是什么?谢谢.
假设您的词典列表被调用data.
然后您可以使用以下代码转换它:
newdata = [{dic['answer_type']: dic['answer__count']} for dic in data]
Run Code Online (Sandbox Code Playgroud)
如果您不太了解此代码,请查看Python理解
假设您的数据存储在 中d,有几种方法可以做到这一点:
对于每个可迭代对象,您都可以使用列表理解,因此可以使用 迭代项目[it for it in iterable](您也可以在字典中使用列表理解)。
In [6]: [{dic['answer_type']: dic['answer__count']} for dic in d]
Out[6]: [{'Yes': 5}, {'No': 3}, {'Maybe': 2}]
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢函数式编程,请考虑使用 map ,它将函数应用于可迭代的每个元素(这是我的首选方法,如果我必须使用列表一次又一次地执行此操作,我只需定义然后运行一次):
In [2]: map(lambda dic: {dic['answer_type']: dic['answer__count']}, d)
Out[2]: [{'Yes': 5}, {'No': 3}, {'Maybe': 2}]
Run Code Online (Sandbox Code Playgroud)
对于某些人来说这不如列表理解那么好读,对于某些人来说更好,取决于个人感受。这适用于 python2,在 py3 中它为您提供了一个迭代器,因此您必须使用listaround the map 来获取列表。
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |