基于key:value匹配python修改列表项
假设我们有以下列表:基于key:value匹配python修改列表项,python,python-3.x,Python,Python 3.x,假设我们有以下列表: my_list = [{'id': '1', 'status':'new'}, {'id': '2', 'status':'closed'}, {'id': '3', 'status':'new'}] 有没有办法用'id':'1'更改dict的'status' 这样,列表将导致: my_list = [{'id': '1', 'status':'changed'}, # <--- {'id': '2
my_list = [{'id': '1', 'status':'new'},
{'id': '2', 'status':'closed'},
{'id': '3', 'status':'new'}]
有没有办法用'id':'1'
更改dict的'status'
这样,列表将导致:
my_list = [{'id': '1', 'status':'changed'}, # <---
{'id': '2', 'status':'closed'},
{'id': '3', 'status':'new'}]
这是唯一的选择还是有一个“更好”的方法?因为这是一个目录列表。循环通过它将是我想到的方式:
my_list = [{'id': '1', 'status':'new'},{'id': '2', 'status':'closed'},{'id': '3', 'status':'new'}]
for i,j in enumerate(my_list):
if j['id'] == '1':
my_list[i]['status']='changed'
print(my_list)
既然这是一个循环的目录,我就会想到:
my_list = [{'id': '1', 'status':'new'},{'id': '2', 'status':'closed'},{'id': '3', 'status':'new'}]
for i,j in enumerate(my_list):
if j['id'] == '1':
my_list[i]['status']='changed'
print(my_list)
除非您有更改数据结构的选项(例如,一个dict of dict而不是一个dict list of dict),否则没有-因为它是一个列表,您必须在它上面循环以找到具有匹配的
id
的dict。因此,如果您仅限于使用列表,唯一需要更改的是循环项而不是索引:
my_列表中的d的:
如果d['id']=='desired_id':
d['status']='desired_status'
打破
其他:
打印(“没有与所需搜索匹配的ID”)
但是,如果您可以将数据更改为,例如:
my_dict={'1':{'status':'new'},
'2':{'status':'closed'},
'3':{'status':'new'}
…那么就根本不需要循环(即假定id
s不能重复):
试试看:
my_dict['desired_id']['status']='desired_status'
除KeyError外:
打印(“没有与所需搜索匹配的ID”)
除非您有更改数据结构的选项(例如,一个dict of dict而不是一个dict list of dict),否则没有-因为它是一个列表,所以您必须在它上面循环以找到具有匹配的id的dict
。因此,如果您仅限于使用列表,唯一需要更改的是循环项而不是索引:
my_列表中的d的:
如果d['id']=='desired_id':
d['status']='desired_status'
打破
其他:
打印(“没有与所需搜索匹配的ID”)
但是,如果您可以将数据更改为,例如:
my_dict={'1':{'status':'new'},
'2':{'status':'closed'},
'3':{'status':'new'}
…那么就根本不需要循环(即假定id
s不能重复):
试试看:
my_dict['desired_id']['status']='desired_status'
除KeyError外:
打印(“没有与所需搜索匹配的ID”)