如何像PHP的foreach函数那样遍历Python数组/对象

3

我是Python的新手,很抱歉要问这样一个可能很简单的问题。

我正在修改一个脚本,其中有一个数组(?),我可以使用以下命令打印出来:

repr(Interfaces.log_manager.job_log[user_id])) 给我的结果是:

{
'3f2': ('3', 0.0078125, 1405595247.855199), 
'3f1': ('3', 0.00390625, 1405595247.855164), 
'3ed': ('2', 0.0078125, 1405595227.65275), 
'3ec': ('2', 0.00390625, 1405595202.852576), 
'3eb': ('2', 0.00390625, 1405595202.852538)
}

我现在想要对括号中第二个值求和,并且获取括号中第三个值的最小值和最大值。

在PHP中,可以使用foreach循环实现...在Python中该如何实现呢?

我的结果应该是:

sum = 0.0312496
mintime: 1405595202
maxtime: 1405595247

任何帮助都非常感激。
谢谢。
4个回答

3

首先,您的数据结构在Python中是dict,因此您应该;

for k,v in l.iteritems():
    print k,v

输出结果:
3ec ('2', 0.00390625, 1405595202.852576)
3ed ('2', 0.0078125, 1405595227.65275)
3f2 ('3', 0.0078125, 1405595247.855199)
3eb ('2', 0.00390625, 1405595202.852538)
3f1 ('3', 0.00390625, 1405595247.855164)

2

试试这个

>>> a = {'3ec': ('2', 0.00390625, 1405595202.852576), '3ed': ('2', 0.0078125, 1405595227.65275), '3f2': ('3', 0.0078125, 1405595247.855199), '3eb': ('2', 0.00390625, 1405595202.852538), '3f1': ('3', 0.00390625, 1405595247.855164)}
>>> min_val = min([x[2] for x in a.values()])
>>> max_val = max([x[2] for x in a.values()])
>>> sum_val = sum([x[1] for x in a.values()])
>>> print min_val, max_val, sum_val
1405595202.85 1405595247.86 0.02734375

1
非常感谢,这个完美地运行了,就像预期的那样。从来没有想过它可以如此简单 :) - biergardener
Python让事情变得更简单 ;) - Nilesh

0
你可以使用Python中的for循环来模拟PHP的foreach,例如:
for key, value in Interfaces.log_manager.job_log[user_id].iteritems():

花括号之间的数据只是一个数组,因此您可以在上述示例中将元素称为value [0]value [1]等。


0
在Python中,映射(或PHP中的关联数组)被称为字典(或简称dict)。需要注意的一点是,在Python字典上进行迭代的顺序不能保证。在Python中,您可以以多种方式循环遍历字典。最简单的方法是迭代字典的键。
for k in D:
    #k is the key, D[k] is the value
    print k, D[k]

为了方便起见,您可以使用字典的.iteritems方法一次获取键和值,该方法返回一个(key, value)元组序列,可以通过for循环语法隐式解包为多个变量,如下所示:

for key, val in D.iteritems():
    print "Key:", key
    print "Value:", value
    print

如果你完全不关心键,你可以使用字典的 .values 方法,例如:
for val in D.values():
    print val

一个完整的解决方案是

import sys
sum = 0
minv2 = sys.maxint
maxv2 = -sys.maxint
for val in Interfaces.log_manager.job_log[user_id].values():
    sum += val[1]
    if val[2] < minv2:
        minv2 = val[2]
    if val[2] > maxv2:
        maxv2 = val[2]
print "sum =", sum
print "mintime:", minv2
print "maxtime:", maxv2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接