3

我是 Python 新手,很抱歉问了这么一个简单的问题。

我正在破解一个具有 Array(?) 的脚本,我可以使用以下命令打印它:

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

4 回答 4

2

首先,您的数据结构dict在 python 中,所以您应该;

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)
于 2014-07-17T12:09:02.547 回答
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
于 2014-07-17T12:13:00.957 回答
0

您可以在 python 中模拟 PHP foreachfor

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

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

于 2014-07-17T12:09:40.817 回答
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
于 2014-07-17T12:24:21.827 回答