python - 基于key:value匹配python修改列表项
问题描述
假设我们有以下列表:
my_list = [{'id': '1', 'status':'new'},
{'id': '2', 'status':'closed'},
{'id': '3', 'status':'new'}]
有没有办法改变'status'
dict 的'id':'1'
?
这样,列表将导致:
my_list = [{'id': '1', 'status':'changed'}, # <---
{'id': '2', 'status':'closed'},
{'id': '3', 'status':'new'}]
我看到一种方法可能是这样的:
for i in range(len(my_list)):
if my_list[i]['id'] == 'desired_id':
my_list[i]['status'] = 'desired_status'
break
这是唯一的选择还是有“更好”的方法?
解决方案
除非您可以选择更改数据的结构(例如 dicts 的 dict 而不是 dicts 的列表),否则不能 - 因为它是一个列表,您必须遍历它才能找到匹配的 dict id
。因此,如果您仅限于使用列表,唯一需要更改的是循环项目而不是索引:
for d in my_list:
if d['id'] == 'desired_id':
d['status'] = 'desired_status'
break
else:
print("There is no ID matching the desired search")
但是,如果您可以将数据更改为,例如:
my_dict = {'1': {'status': 'new'},
'2': {'status': 'closed'},
'3': {'status': 'new'}}
...那么根本不需要循环(假设id
s 不能重复):
try:
my_dict['desired_id']['status'] = 'desired_status'
except KeyError:
print("There is no ID matching the desired search")
推荐阅读
- kubernetes - 如何知道容器是否在 HA 集群的领导者 kube-scheduler pod 上运行?
- xamarin - Android 5 设备上的安全警告
- python-3.x - 如何使用python将时间差值放入求和方程
- javascript - 如果使用jquery单击下一步,如何隐藏上一个切换?
- web-applications - 通知不会在真实硬件(gear s3)上显示,但会在模拟器上显示
- ios - iOS 中的 Razorpay 集成
- zsh - zsh:计算命令替换中的行数
- css - 当我向它添加 css 时,React 组件停止工作
- c++ - 如果元素不可分配,则复制分配地图
- codeigniter - 我想获取学生数据,但它只获取一行数据