是的,您的方法的问题在于:
body[part][coordinate] = value
body[part] 返回列表,然后您尝试使用字符串coordinate 对列表进行索引,但失败了。
你可以只使用字典理解:
>>> labels = ['xmin', 'ymin', 'xmax', 'ymax']
>>> new_body = {k:dict(zip(labels, v)) for k,v in body.items()}
>>> pprint(new_body)
{'Lknee': {'xmax': 862, 'xmin': 797, 'ymax': 1395, 'ymin': 1323},
'Lshoul': {'xmax': 885, 'xmin': 809, 'ymax': 740, 'ymin': 678},
'face': {'xmax': 816, 'xmin': 698, 'ymax': 652, 'ymin': 494},
'hips': {'xmax': 848, 'xmin': 641, 'ymax': 1019, 'ymin': 977},
'lHand': {'xmax': 920, 'xmin': 872, 'ymax': 1194, 'ymin': 1075},
'lfoot': {'xmax': 928, 'xmin': 831, 'ymax': 1777, 'ymin': 1665},
'rHand': {'xmax': 620, 'xmin': 563, 'ymax': 1184, 'ymin': 1074},
'rKnee': {'xmax': 726, 'xmin': 657, 'ymax': 1372, 'ymin': 1313},
'rShoul': {'xmax': 690, 'xmin': 608, 'ymax': 737, 'ymin': 674},
'rfoot': {'xmax': 741, 'xmin': 676, 'ymax': 1743, 'ymin': 1624}}
>>>
如你所愿:
>>> new_body['face']['xmin']
698
>>>
当然,理解结构可以用for循环代替:
>>> new_body = {}
>>> for k, v in body.items():
... new_body[k] = dict(zip(labels, v))
...
>>> pprint(new_body)
{'Lknee': {'xmax': 862, 'xmin': 797, 'ymax': 1395, 'ymin': 1323},
'Lshoul': {'xmax': 885, 'xmin': 809, 'ymax': 740, 'ymin': 678},
'face': {'xmax': 816, 'xmin': 698, 'ymax': 652, 'ymin': 494},
'hips': {'xmax': 848, 'xmin': 641, 'ymax': 1019, 'ymin': 977},
'lHand': {'xmax': 920, 'xmin': 872, 'ymax': 1194, 'ymin': 1075},
'lfoot': {'xmax': 928, 'xmin': 831, 'ymax': 1777, 'ymin': 1665},
'rHand': {'xmax': 620, 'xmin': 563, 'ymax': 1184, 'ymin': 1074},
'rKnee': {'xmax': 726, 'xmin': 657, 'ymax': 1372, 'ymin': 1313},
'rShoul': {'xmax': 690, 'xmin': 608, 'ymax': 737, 'ymin': 674},
'rfoot': {'xmax': 741, 'xmin': 676, 'ymax': 1743, 'ymin': 1624}}
>>>
我认为,通过阅读您的代码,您正试图“从长远来看”,如下所示:
>>> new_body = {}
>>> for k, v in body.items():
... new_body[k] = {}
... for coordinate, value in zip(labels, v):
... new_body[k][coordinate] = value
...
>>> pprint(new_body)
{'Lknee': {'xmax': 862, 'xmin': 797, 'ymax': 1395, 'ymin': 1323},
'Lshoul': {'xmax': 885, 'xmin': 809, 'ymax': 740, 'ymin': 678},
'face': {'xmax': 816, 'xmin': 698, 'ymax': 652, 'ymin': 494},
'hips': {'xmax': 848, 'xmin': 641, 'ymax': 1019, 'ymin': 977},
'lHand': {'xmax': 920, 'xmin': 872, 'ymax': 1194, 'ymin': 1075},
'lfoot': {'xmax': 928, 'xmin': 831, 'ymax': 1777, 'ymin': 1665},
'rHand': {'xmax': 620, 'xmin': 563, 'ymax': 1184, 'ymin': 1074},
'rKnee': {'xmax': 726, 'xmin': 657, 'ymax': 1372, 'ymin': 1313},
'rShoul': {'xmax': 690, 'xmin': 608, 'ymax': 737, 'ymin': 674},
'rfoot': {'xmax': 741, 'xmin': 676, 'ymax': 1743, 'ymin': 1624}}
>>>