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

3 投票
4 回答
2193 浏览
提问于 2025-04-18 13:41

我刚开始学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 个回答

0

在Python中,映射(在PHP中叫做关联数组)被称为字典(简称dict)。需要注意的是,Python字典的遍历顺序是没有保证的。你可以用多种方式来循环遍历一个字典,最简单的方式就是遍历字典的键。

for k in D:
    #k is the key, D[k] is the value
    print k, D[k]

为了方便,你可以使用字典的.iteritems方法,同时获取键和值,这个方法会返回一系列的(键,值)元组,使用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
0

你可以用 Python 的 for 来模拟 PHP 的 foreach,也就是说,

for key, value in Interfaces.log_manager.job_log[user_id].iteritems():

而大括号里的数据其实就是一个数组,所以在上面的例子中,你可以用 value[0]value[1] 等来访问这些元素。

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

撰写回答