Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于同一密钥从字典列表构建新字典_Python_Dictionary - Fatal编程技术网

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嗨,对不起,忘记添加我自己的尝试。我已经编辑了这个问题。谢谢