我输入了这样的数据
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"}]}
如何以有效的方式实现这一目标?
答案 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'
等)。