Python 基于同一密钥从字典列表构建新字典
我试图根据相同的Python 基于同一密钥从字典列表构建新字典,python,dictionary,Python,Dictionary,我试图根据相同的categoryNamekey值对dict进行分组 列表字典的来源 data = [{'category_id': 1, 'categoryName': 'Civil', 'author': 'x', 'title': 'Stone'}, {'category_id': 1, 'categoryName': 'Civil', 'author': 'y', 'title': 'House'}, {'category_id': 2, 'category
categoryName
key值对dict进行分组
列表字典的来源
data = [{'category_id': 1,
'categoryName': 'Civil',
'author': 'x',
'title': 'Stone'},
{'category_id': 1,
'categoryName': 'Civil',
'author': 'y',
'title': 'House'},
{'category_id': 2,
'categoryName': 'Programming',
'author': 'x',
'title': 'Python'},
{'category_id': 2,
'categoryName': 'Programming',
'author': 'y',
'title': 'Java'}]
我的目标输出
new_data = {'Civil':[{'Title':'Stone', 'author':'x'},
{'Title':'House', 'author':'y'}],
'Programming':[{'Title':'Python', 'author':'x'},
{'Title':'Java', 'author':'y'}]}
我迄今为止的努力:
使用生成categoryName的列表
categories = set([i['categoryName'] for i in data])
然后用
d = {}
for cat in categories:
d[cat] = []
for book in data:
if book['category_name'] == cat:
d[cat].append(book)
它起作用了。但我认为这不是正确或优雅的方式
寻找更多的解决方案。谢谢 由于您需要从
数据的每个元素中获取详细信息,因此我将跳过设置
步骤,迭代每个列表元素以获取标题和作者。如果类别在new\u data
中,则添加到列表中,否则添加一个包含所需信息的新列表
data = [{'category_id': 1,
'categoryName': 'Civil',
'author': 'x',
'title': 'Stone'},
{'category_id': 1,
'categoryName': 'Civil',
'author': 'y',
'title': 'House'},
{'category_id': 2,
'categoryName': 'Programming',
'author': 'x',
'title': 'Python'},
{'category_id': 2,
'categoryName': 'Programming',
'author': 'y',
'title': 'Java'}]
new_data={}
for d in data:
if d['categoryName'] in new_data:
new_data[d['categoryName']].append({'Title':d['title'],'author':d['author']})
else:
new_data[d['categoryName']]=[{'Title':d['title'],'author':d['author']}]
print(new_data)
#{'Civil': [{'Title': 'Stone', 'author': 'x'}, {'Title': 'House', 'author': 'y'}], 'Programming': [{'Title': 'Python', 'author': 'x'}, {'Title': 'Java', 'author': 'y'}]}
在询问之前,您自己尝试过做什么?正如@depperm所说的,首先向我们展示您的代码,但同时,请查找defaultdict
,它将真正帮助您。@depperm嗨,对不起,忘记添加我自己的尝试。我已经编辑了这个问题。谢谢