python - 如何在字典列表中唯一地复制字典中的值?
问题描述
更新:抱歉没有仔细使用break and continue
,整个逻辑都改变了,只是用break替换了continue,很抱歉在没有清除基本面的情况下发布。
我已阅读此解决方案,但不明白。
背景:我正在开发 Odoo 框架,并进行 api 调用,在字典列表中获得响应。
响应列表非常大,我只想通过创建新的字典列表将其添加到数据库中。
但是当我调用更新函数时,它会再次添加值,所以我想检查该 id 是否唯一存在然后跳过追加,否则将该值添加到列表中。
api响应是这样的:
rooms_list = [
{
"id": 1,
"name": "A",
"rates": "dictA"
},
{
"id": 2,
"name": "B",
"rates": "dictB"
},
{
"id": 3,
"name": "C",
"rates": "dictC"
},
]
我当前的列表最初的值很少:
new_list = [
{
"id": 1,
"name": "A"
},
{
"id":2,
"name":"B"
}
]
现在,它应该只将最后一个字典添加到列表中,但它会添加冗余值,我在哪里犯错了?
我的整个代码如下:
print("new_list initially is => ", new_list)
one_record = {}
for i in rooms_list:
for j in new_list:
one_record = {}
print("j is ", j)
if j["id"] == i["id"]:
print("escape this record because it exist already in our new_list")
continue
else:
print("else add it in our new_list")
one_record["id"] = i["id"],
one_record["name"] = i["name"],
if one_record != {}:
print("one_record is not empty for j =>", j)
new_list.append(one_record)
print("rooms_list is ", rooms_list)
print("new_list is ", new_list)
输出如下:
('rooms_list is ', [{'rates': 'dictA', 'id': 1, 'name': 'A'}, {'rates': 'dictB', 'id': 2, 'name': 'B'}, {'rates': 'dictC', 'id': 3, 'name': 'C'}])
('new_list is ', [{'id': 1, 'name': 'A'}, {'id': 2, 'name': 'B'}, {'id': (1,), 'name': ('A',)}, {'id': (2,), 'name': ('B',)}, {'id': (3,), 'name': ('C',)}])
如何添加没有多余的新词典id
?
解决方案
您可以使用这样的简单循环:
for i in rooms_list:
if i['id'] not in [item['id'] for item in new_list]:
new_list.append(i)
print(new_list)
这使:
[{'id': 1, 'name': 'A'},
{'id': 2, 'name': 'B'},
{'id': 3, 'name': 'C', 'rates': 'dictC'}]
推荐阅读
- android - Nosuchmethod:org.jetbrains.kotlin.resolve.diagnostics.DiagnosticSuppressor$Companion.getEP_NAME() 来自 kotlin-compiler-embeddable.jar
- reactjs - 检测移动设备的移动浏览器关闭事件
- java - BigQuery/Gcp 数据传输到 Amazon S3
- php - 试图理解 WordPress 插件样板
- javascript - video.js 加密或隐藏视频源 url
- r - 为什么这个带有“dygraph”包的著名简单代码不起作用?
- javascript - 如果值具有“翻译”,如何根据标签获取内部文本
- excel - 带密码保护的 Excel 运行宏按钮
- python - 将简单循环转换为列表理解
- dns - 无法验证 Mailgun 接收和跟踪记录