python - 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
}]
},
...
]
我可以通过循环遍历并将同一作者的每个对象存储在一起来做到这一点,但是有没有更快/更好的方法来做到这一点?
解决方案
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())
推荐阅读
- javascript - JavaScript 变量等于 jQuery 选择器创建打开和关闭标签。为什么?
- rabbitmq - 异步处理消息时处理异常的 RabbitMQ 最佳实践
- python - 将多个 csv 文件导入 QGIS 时出错
- c++ - 为什么我不能在 Visual Studio Code 中用花括号初始化变量?
- javascript - 如何检查状态中是否已存在项目?
- android - Flutter 中的通讯 USB 设备
- java - 在 Spring Boot 中具有相同实现的多个 bean
- html - 无法让 bootstrap 4 选项卡与刀片一起使用
- .net - 正则表达式 (.NET) 捕获除空格之外的所有内容
- javascript - 反转一个图表,不反转另一个图表 - 同步的高位图表