问题描述
我有以下形式的词典列表:
[
{
'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())