基于列表的一个字段的数据分组

时间:2016-05-03 18:16:35

标签: python grouping

我输入了这样的数据

input = ((1,'MCA', 'Science'),(2,'physic', 'Science'),(3,'chemsitry', 'Science'),(4,'punjabi', 'arts'),(5,'hindi', 'arts'))

我想按照第三个字段(科学/艺术)对此数据进行分组

result = {"arts":[{"id":"4","name":"punjabi"},{"id":"5","name":"hindi"}],"Science":[{"id":"1","name":"MCA"},{"id":"2","name":"physics"},{"id":"3","name":"chemistry"}]}

如何以有效的方式实现这一目标?

2 个答案:

答案 0 :(得分:2)

只需遍历输入,将每个项目插入结果字典:

result = {}
for id, name, subject in input:
    if subject not in result:
         result[subject] = []
    result[subject].append({"id":str(id), "name":name})

答案 1 :(得分:2)

我会推荐collections.defaultdict。迭代原始数据并为此defaultdict分配新词典。

import collections
result = collections.defaultdict(list)
i = ((1,'MCA', 'Science'),(2,'physic', 'Science'),(3,'chemsitry', 'Science'),(4,'punjabi', 'arts'),(5,'hindi', 'arts'))
for id,name,subject in i:
    result[subject].append({'id':str(id), 'name':name})

您最终得到以下结果:

>>> result
defaultdict(<class 'list'>, {'Science': [{'name': 'MCA', 'id': '1'}, {'name': 'physic', 'id': '2'}, {'name': 'chemsitry', 'id': '3'}], 'arts': [{'name': 'punjabi', 'id': '4'}, {'name': 'hindi', 'id': '5'}]})

它不会影响算法,但请记住在将内容拼写到程序之前仔细检查内容的拼写(即'chemsitry'等)。