Более питонный способ для работы со списками и диктовками

Я ищу более питонный 2.4 способ сделать следующее:

for (keys, values) in my_dict.iteritems():
    fmt_str = '%s, %s' % (keys[0], keys[1])
    for value in values:
        fmt_str = '%s, %s, %s' % (fmt_str, value[0], value[1])
    print fmt_str

Примечание: my_dict состоит из кортежей для ключа и из списка кортежей для значения.

2 ответа

Решение

Как насчет:

from itertools import chain

for keys, values in my_dict.iteritems():
    fmt_str = ', '.join(map(str, chain(keys, *values)))
    print fmt_str

Если все значения в keys а также values уже есть строки, то вы можете удалить map(str, ...) вызов:

for keys, values in my_dict.iteritems():
    fmt_str = ', '.join(chain(keys, *values))
    print fmt_str

Я хотел бы использовать

for (keys, values) in my_dict.iteritems():
    pairs = [keys] + list(values)
    print ', '.join(['%s, %s' % (pair[0], pair[1]) for pair in pairs])

если я действительно связан с Python 2.4 (AFAIR в то время были списки, но не было выражений генератора).

В более поздних версиях я действительно использовал бы выражение генератора и делал

print ', '.join('%s, %s' % (pair[0], pair[1]) for pair in pairs)

или даже

print ', '.join('%s, %s' % (pair[0], pair[1]) for pair in itertools.chain([keys], values))
Другие вопросы по тегам