我是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
非常感谢任何帮助
THX
答案 0 :(得分:2)
首先,你的数据结构在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)
答案 1 :(得分: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
答案 2 :(得分:0)
您可以在python中使用foreach
模拟PHP for
,即
for key, value in Interfaces.log_manager.job_log[user_id].iteritems():
并且大括号之间的数据只是一个数组,因此您可以在上述示例中将元素称为value[0]
,value[1]
等。
答案 3 :(得分:0)
在python中,映射(或PHP中的关联数组)称为Dictionary(或简称dict)。需要注意的一点是,不能保证python字典上的迭代顺序。在python中,您可以通过各种方式遍历字典。最简单的是迭代字典的密钥
for k in D:
#k is the key, D[k] is the value
print k, D[k]
为方便起见,您可以使用字典.iteritems方法同时获取键和值,该方法返回一系列(键,值)元组,可以通过for循环语法隐式解压缩为多个变量,如< / p>
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