【问题标题】:How to walk through a python array/object similar to PHP's foreach function如何遍历类似于 PHP 的 foreach 函数的 python 数组/对象
【发布时间】:2014-09-08 07:07:45
【问题描述】:

我是 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

非常感谢任何帮助

谢谢

【问题讨论】:

    标签: python arrays foreach eval repr


    【解决方案1】:

    在 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 循环语法隐式解包为多个变量,如 in

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

    我对key完全不感兴趣,可以用字典的.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
    

    【讨论】:

      【解决方案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)
      

      【讨论】:

        【解决方案3】:

        试试这个

        >>> 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
        

        【讨论】:

        • 非常感谢,这工作完美,符合预期。没想到会这么简单:)
        • Python 让事情变得更简单 ;)
        【解决方案4】:

        你可以在python中用for模拟PHP的foreach,即

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

        大括号之间的数据只是一个数组,所以在前面的例子中,你可以将元素称为value[0]value[1]等。

        【讨论】:

          猜你喜欢
          • 2012-06-21
          • 1970-01-01
          • 2017-02-17
          • 2015-10-23
          • 1970-01-01
          • 2014-09-07
          • 1970-01-01
          • 2021-07-29
          • 1970-01-01
          相关资源
          最近更新 更多