如果我不知道他是驴还是斑马,怎么能改变'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
答案 0 :(得分:3)
首先,看起来您的数据缺少一些标点符号。我猜错了什么。
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'}]}
答案 1 :(得分:3)
编辑:根据您提供的输出,以下内容应该有效:
data = {'donkey': {'roger': {'zone': 'forrest', 'space': [0, 0]},
'albert': {'zone': 'forrest', 'space': [0, 0]}}}
for species in data.values():
if 'albert' in species:
species['albert']['space'] = [50, 50]
以下原始答案:
这是一种非常简单的方法:
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 species in data.values():
for animal in species:
if animal['name'] == 'albert':
animal['space'] = [50, 50]
或者使用等效的生成器表达式(更短但不清晰):
for albert in (a for s in data.values() for a in s if a['name'] == 'albert'):
albert['space'] = [50, 50]
结果:
>>> pprint.pprint(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'}]}