2011-02-10 3 views
4

Я возвращаюсь список списков, но следующий, кажется, гораздо более запутанная, чем это должно быть:Подробнее Pythonic (или, возможно, функциональный) способ создания этого списка?

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

Ну, возможно, вы * можете * втиснуть это в одно гигантское понимание списка, но это было бы еще менее удобочитаемо. Этот код создает что-то очень сложное из множества источников, мы не можем использовать эти дюжины нескольких вещей, не набирая их. Возможно, что-то улучшилось на уровне разработки (кажется, что по крайней мере три вещи хранятся избыточно в изобилии, а структура данных кажется очень странной вообще), но если вы хотите получить этот точный результат, мало кто может это сделать. – delnan

+0

Это честный комментарий, и я согласен, так +1. Я унаследовал код и сейчас пытаюсь сделать улучшения, где могу. – urschrei

ответ

8

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

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

Лично я бы изменил это выражение списка на цикл 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']] 

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

+1

+1: генератор. Положите это первым, пожалуйста. –

+0

Я принимаю как вашу, так и дельнану точку: общая структура ... меньше, чем идеальная, в настоящее время. Этот генератор * намного читаем. – urschrei

+0

Ошибка синтаксиса в списке. Также неверно использовать «.» .join (str (i) для i in (ncode, vendor, extra, value ['suffix'], тариф)) ' –

Смежные вопросы