将字典值转换为字典键值对

时间:2018-02-24 13:38:09

标签: python

我有一个字典项目列表如下:

[{'answer_type': 'Yes', 'answer__count': 5}, {'answer_type': 'No', 
'answer__count': 3}, {'answer_type': 'Maybe', 'answer__count': 2}]

我想将其转换为以下格式:

[{'Yes': 5}, {'No': 3}, {'Maybe': 2}]

我知道我可以遍历字典,拿出我想要的项目并创建一个新字典,但我想知道是否有更优雅的方式。进行此转换的最有效方法是什么?谢谢。

2 个答案:

答案 0 :(得分:8)

假设您的词典列表名为data

然后您可以使用以下代码进行转换:

newdata = [{dic['answer_type']: dic['answer__count']} for dic in data]

如果您不熟悉此代码,请查看Python comprehensions

答案 1 :(得分:2)

假设您的数据存储在d中,有几种方法可以执行此操作:

列表理解

对于每个可迭代,您可以使用list comprehension,因此使用[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}]

功能方法

如果您更多是函数式编程人员,请考虑使用map,它将函数应用于iterable的每个元素(这是我的首选方法,如果我必须一次又一次地使用列表,我只需要定义一次函数):

In [2]: map(lambda dic: {dic['answer_type']: dic['answer__count']}, d)
Out[2]: [{'Yes': 5}, {'No': 3}, {'Maybe': 2}]

对于某些人来说,这不像列表理解那样好看,因为有些人更好,取决于个人感受。这将与python2一起使用,在py3中它为您提供了一个迭代器,因此您必须在地图周围使用list来获取列表。