我有一个结果清单,即
result=[{u'faceRectangle': {u'width': 246, u'top': 196, u'height': 246, u'left': 113}},
{u'faceRectangle': {u'width': 217, u'top': 213, u'height': 217, u'left': 614}}]
我可以通过
访问每个元素result[index]['faceRectangle']['width']
现在我想在这个结果列表上运行for循环,将每个输出保存在不同的变量中 宽度1,TOP1,height1,LEFT1,宽度2,TOP2,身高2,LEFT2
怎么做?
答案 0 :(得分:0)
@jedwards在评论中指出,这几乎肯定是一个坏主意。
但是,您可以使用operator.itemgetter
返回值元组。这可以让你有点紧凑地表达你的想法:
getvars = operator.itemgetter('height', 'left', 'top', 'width')
height1, left1, top1, width1 = getvars(result[1]['faceRectangle'])
height2, left2, top2, width2 = getvars(result[2]['faceRectangle'])
当然,这假设您知道有多少结果,并且总是有相同的数字,并且您需要同时处理它们。
你最好一次只处理一两个,并使用变量作为faceRect
词典的参考:
r1 = result[1]['faceRectangle']
r2 = result[2]['faceRectangle']
if r1['width'] < r2['width']:
pass
答案 1 :(得分:0)
width = map(lambda x: x['faceRectangle']['width'], result)
height = map(lambda x: x['faceRectangle']['height'], result)
top = map(lambda x: x['faceRectangle']['top'], result)
left = map(lambda x: x['faceRectangle']['left'], result)
现在您可以按宽度[0]
等索引访问每个值答案 2 :(得分:0)
因为你有&#34; Rect&#34;的概念。在这里,您可以定义一个数据结构来表示它,例如class
或tuple
。
import collections
Rect = collections.namedtuple('Rect', ['width', 'top', 'height', 'left'])
rect1 = Rect(**result[0]['faceRectangle'])
rect2 = Rect(**result[1]['faceRectangle'])
print(rect1)
print(rect1.width)
print(rect1.top)
print(rect1.height)
print(rect1.left)
print(rect2)
你得到:
Rect(width=246, top=196, height=246, left=113)
246
196
246
113
Rect(width=217, top=213, height=217, left=614)
答案 3 :(得分:0)
与@ingvar的answer类似,您可以使用列表推导而不是map
和lambda
,这可以在Python 2和3中运行。
width = [element for element in result['faceRengtangle']['width']]
height = [element for element in result['faceRengtangle']['height']]
top = [element for element in result['faceRengtangle']['top']]
left = [element for element in result['faceRengtangle']['left']]
所以,再次,如果您之后想要使用第二个result
的{{1}},那么您将使用width
访问它,因为索引从width[1]
开始计算