如何运行循环给索引

时间:2017-09-08 18:34:56

标签: python loops for-loop

我有一个结果清单,即

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

怎么做?

4 个答案:

答案 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;的概念。在这里,您可以定义一个数据结构来表示它,例如classtuple

namedtuple

很简单
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)

@ingvaranswer类似,您可以使用列表推导而不是maplambda,这可以在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]开始计算