Skip to main content
 首页 » 编程设计

python之编辑信息有限的嵌套字典

2025年05月04日17jyk

如果我不知道他是驴还是斑马,如何更改'albert'的'空格'?

self.object_attr = {'donkey': { 
                              'name': 'roger', 'zone': 'forrest', 'space': [0, 0]}{ 
                              'name': 'albert', 'zone': 'forrest', 'space': [1, 1]} 
                    'zebra': { 
                              'name': 'pain', 'zone': 'forrest', 'space': [0, 0]}{ 
                              'name': 'alesha', 'zone': 'forrest', 'space': [1, 1]}} 
 
print self.object_attr 
for species in data.values(): 
    for animal in species: 
        if animal['name'] == 'albert': 
            animal['space'] = [50, 50] 
 
#output      this is what object_attr is 
{'donkey': {'roger': {'zone': 'forrest', 'space': [0, 0]}, 'albert': {'zone': 'forrest', 'space': [0, 0]}}} 
 
 
#the error occurs on the "if animal['name'] == 'albert':" line 
TypeError: string indices must be integers, not str 

请您参考如下方法:

首先,您的数据似乎缺少一些标点符号。我对丢失的内容做出了最好的猜测。

data = {'donkey': [{ 'name': 'roger', 'zone': 'forrest', 'space': [0, 0]}, { 'name': 'albert', 'zone': 'forrest', 'space': [1, 1]}], 
      'zebra':  [{ 'name': 'roger', 'zone': 'forrest', 'space': [0, 0]}, {'name': 'albert', 'zone': 'forrest', 'space': [1, 1]}] 
} 
 
for v in data.values(): 
    [item.update({'space':[50, 50]}) for item in v if item['name'] == 'albert'] 
 
print data 

输出

{'donkey': [{'name': 'roger', 'space': [0, 0], 'zone': 'forrest'}, 
        {'name': 'albert', 'space': [50, 50], 'zone': 'forrest'}], 
 'zebra': [{'name': 'roger', 'space': [0, 0], 'zone': 'forrest'}, 
       {'name': 'albert', 'space': [50, 50], 'zone': 'forrest'}]}