首页 > 解决方案 > 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
    }]
  },
  {
    'author': 'Jane Doe',
    'book': [{  # a single book should still be a list
      'name': 'Book 2',
      'year': 2003
    }]
  },
  ...
]

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

标签: pythoncollectionsziplist-comprehensiondictionary-comprehension

解决方案


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())


推荐阅读