Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于key:value匹配python修改列表项_Python_Python 3.x - Fatal编程技术网

基于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”)