3 回答

TA贡献1821条经验 获得超6个赞
您可以使用这样的简单循环:
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'}]

TA贡献1810条经验 获得超4个赞
由于您只对 ID 和名称感兴趣,因此您可以从 dict 列表切换到单个 dict:
new_dict = {entry['id']: entry['name'] for entry in new_list}
然后,正确使用dict.setdefault
which 正是您想要的:插入一个值,除非键已经存在:
for entry in rooms_list: new_dict.setdefault(entry['id'], entry['name'])
如果之后您仍然需要列表,您可以轻松地new_dict
再次转换为列表:
new_list = [{'id': id, 'name': name} for id, name in new_dict.items()]
请注意,从 CPython 3.6 开始,这种方法也将保持 items 的顺序。

TA贡献2037条经验 获得超6个赞
我会维护一组ID:
给定
new_list = [
{
"id": 1,
"name": "A"
},
{
"id":2,
"name":"B"
}
]
创建一组 id
ids = set(entry["id"] for entry in new_list)
然后
for entry in rooms_list:
id = entry["id"]
name = entry["name"
if id not in ids:
new_list += {"id": id, "name": name}
ids.add(id)
更好的选择是创建这样的字典而不是您的字典,new_list因为它在更小的空间中包含所有相同的信息,并且会自行强制执行唯一 ID:
better_new_list = {
1: "A",
2: "B",
}
现在添加它是这样的:
for entry in rooms_list:
id = entry["id"]
name = entry["name"]
if id not in better_new_list:
better_new_list[id] = name
添加回答
举报