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

Python combine list of dictionaries with an equivalent field

我有一个字典列表,格式如下:

[
  {
    '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
    }]
  },
  {
    'author': 'Jane Doe',
    '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())

获取列表