Как пройти через массив / объект python, аналогичный функции foreach в PHP

Я новичок в 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)
}

Я знаю, хочу суммировать 2-е значения в скобках и получить минимальное и максимальное значение третьего в скобках.

В PHP это возможно с помощью foreach... Как это делается в Python?

Мой результат должен / будет:

sum = 0.0312496
mintime: 1405595202
maxtime: 1405595247

Любая помощь очень ценится

Спасибо

4 ответа

Решение

Попробуй это

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

Прежде всего, ваша структура данных 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)

Вы можете моделировать PHP foreach с for в питоне, т.е.

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

и данные между фигурными скобками это просто массив, так что вы можете ссылаться на элементы как value[0], value[1]и т.д., в вышеупомянутом примере.

В python отображение (или ассоциативный массив в PHP) называется словарем (или для краткости dict). Следует отметить, что порядок итерации по словарю Python не гарантирован. В 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
Другие вопросы по тегам