更新python中的列表元素

时间:2016-03-07 14:34:34

标签: python json list

在我的python代码中如果我有这样的列表:

   my_list= [{"name": "my name", "timestamp": {"$date": 1459002562091}, "longitude": 20.169550966746304, "location": "Work", "victim": {"language": "English", "locality": "Bern", "gender": "Other", "region": "Gabon", "birthday": {"$date": 506736000000}, "nationality": "United States", "ethnicity": "Bosnian"}, "person": "Stranger", "latitude": 43.05529651674635, "personGender": "Male", "type": ["Shouting"]}, {"name": "my name", "timestamp": {"$date": 1455632962091}, "longitude": 21.292620354706038, "location": "Public Space", "victim": {"language": "English", "locality": "Ferizaj", "gender": "Other", "region": "Kosovo", "birthday": {"$date": 601516800000}, "nationality": "Canada", "ethnicity": "Turkish"}, "person": "Waiter", "latitude": 42.81558228232729, "personGender": "Male", "type": ["Comments", "Whistling"]}]

我想修改此列表以检查此列表的JSON元素,然后我想找到元素name来检查它们的值,我使用另一个函数来替换值,所以这里我将使用作为一个例子"只是一个示例字符串"。

同样对于类型,如果类型是我进行相同的检查并用另一个函数替换它们的值但是在这里我将使用相同的值"键入示例"。

所以我开始这样:

for item in my_list:
    item["name"] = "Just an example string"
    for element in item["type"]:
        element = "Type example"

现在我想将这些更新的字段保存在同一个列表中,所以我只是更新这两个字段而其他字段应保持不变?我怎样才能做到这一点?请帮帮我

3 个答案:

答案 0 :(得分:2)

您必须使用索引而不是for something in iterable:表示法:

for i in range(0, len(my_list)):
    my_list[i]["name"] = "Just an example string"
    for j in range(0, len(my_list[i]["type"])):
        my_list[i]["type"][j] = "Type example"

这将更新你的词典列表(而不是JSON)。

编辑:正如@gtlambert所指出的那样,没有必要将零作为range的第一个参数,您只需编写range(some_number)

答案 1 :(得分:0)

在Python中,列表和字典是可变的,并通过引用和字符串传递,数字和元组是不可变的,并按值传递。

因此,如果在l中使用for x迭代一个int或字符串列表:你将无法更改它们,因为x是int或string的实际值。

In [17]: l = [1, 2, 3, 4, 5]

In [18]: for x in l:
   ....:     x = 0
   ....:     

In [19]: l
Out[19]: [1, 2, 3, 4, 5]

但是当你有一个词典列表时,一切都会改变:

In [31]: l=[{'a':1}, {'a':2}]

In [32]: for x in l:
   ....:     x['a'] = 0
   ....:     

In [33]: l
Out[33]: [{'a': 0}, {'a': 0}]

因此,您的原始示例可以按照您所写的方式工作,您可以在其中更改列表中的字典项,但不能以相同的方式更改类型,因为它只是一个字符串列表。

In [14]: my_list = [
   ....:     {"id": 1 ,"number":12, "name": "test1", "type":["read"]}, 
   ....:     {"id": 1 ,"number":12, "name": "test2","type":["write"]},
   ....:     {"id": 1 ,"number":12, "name": "test3","type":["read", "write"]}
   ....:     ]

In [15]: for item in my_list:
   ....:         item["name"] = "Just an example string"
   ....:         for element in item["type"]:
   ....:                 element = "Type example"
   ....:         

In [16]: my_list
Out[16]: 
[{'id': 1, 'name': 'Just an example string', 'number': 12, 'type': ['read']},
 {'id': 1, 'name': 'Just an example string', 'number': 12, 'type': ['write']},
 {'id': 1,
  'name': 'Just an example string',
  'number': 12,
  'type': ['read', 'write']}]

In [17]: 

这是解决问题的更加琐碎的解决方案:

In [35]: for item in my_list:
   ....:     item["name"] = "Just an example string"
   ....:     item["type"] = ["Type Example" for element in item["type"]]
   ....:     

In [36]: my_list
Out[36]: 
[{'id': 1,
  'name': 'Just an example string',
  'number': 12,
  'type': ['Type Example']},
 {'id': 1,
  'name': 'Just an example string',
  'number': 12,
  'type': ['Type Example']},
 {'id': 1,
  'name': 'Just an example string',
  'number': 12,
  'type': ['Type Example', 'Type Example']}]

In [37]: 

答案 2 :(得分:0)

这就是你可以在python中更新列表项的方法

list = ['physics', 'chemistry', 1997, 2000];
print "Value available at index 2 : "
print list[2]
list[2] = 2001;
print "New value available at index 2 : "
print list[2]