Более Pythonic (или, возможно, функциональный) способ создания этого списка? - PullRequest
4 голосов
/ 10 февраля 2011

Я возвращаю список списков, но следующее кажется гораздо более запутанным, чем должно быть:

new_list = []
for key, value in group.items(): 
    new_list.extend([['%s%s%s%s%s' % (
    ncode, vendor, extra, value['suffix'], tariff),
    value['latest_cost'], value['rrp'], value['rb']] for tariff in value['trf']])
return new_list

1 Ответ

8 голосов
/ 10 февраля 2011

Это не особенно запутанно. У вас есть два «уровня», элементы в группе, которые вы расширяете на один уровень. Для этого это не очень запутанно.

Более функциональный способ - объединить все это в одно выражение вложенного списка, я думаю, что это возможно. Но это наверняка не было бы более читабельным, и лично я думаю, что это не пифонично (то есть мне не нравится).

Лично я бы изменил это выражение списка на цикл for для удобства чтения.

new_list = []
for key, value in group.items(): 
    for tariff in value['trf']:
        name = ''.join(ncode, vendor, extra, value['suffix'], tariff)
        new_list.append(name, value['latest_cost'], value['rrp'], value['rb']])
return new_list

Ну, на самом деле, я бы сделал из этого генератор, потому что они мне нравятся:

def tariffs(group):
    for key, value in group.items(): 
        for tariff in value['trf']:
            name = ''.join(ncode, vendor, extra, value['suffix'], tariff)
            yield [name, value['latest_cost'], value['rrp'], value['rb']]

Вы также можете рассмотреть возможность создания объектов из этого. Как только у вас есть списки списков или словарей словарей, стоит подумать о создании классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...