我有一个字典项目列表如下:
[{'answer_type': 'Yes', 'answer__count': 5}, {'answer_type': 'No',
'answer__count': 3}, {'answer_type': 'Maybe', 'answer__count': 2}]
我想将其转换为以下格式:
[{'Yes': 5}, {'No': 3}, {'Maybe': 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
来获取列表。