Python将字典列表与等效字段组合在一起

问题描述

我有以下形式的词典列表:

[
  {
    'author': 'John Doe','book': {
      'name': 'Book 1','year': 1999
    }
  },{
    'author': 'Jane Doe','book': {
      'name': 'Book 2','year': 2003
    }
  },{
    'author': 'John Doe','book': {
      'name': 'Book 3','year': 2001
    }
  },...
]

我想合并具有等效'author'字段的对象以创建书籍列表,因此结果如下:

[
  {
    'author': 'John Doe','book': [{
      'name': 'Book 1','year': 1999
    },{
      'name:' 'Book 3','year': 2001
    }]
  },'book': [{  # a single book should still be a list
      'name': 'Book 2','year': 2003
    }]
  },...
]

我可以通过遍历并与同一作者一起存储每个对象来做到这一点,但是有没有更快/更好的方法呢?

解决方法

使用作者姓名作为密钥填充新的dict。这样会遍历列表一次。

authors = {}

for author in lst:
    name = author["author"]
    if name not in authors:
        authors[name] = {"author": name,"books": []}
    authors[name]["books"].append(author["book"])

您可以将其保留为字典,也可以使用list(authors.values())

获取列表。