Это не особенно запутанным. У вас есть два «уровня», элементы в группе, которые вы расширяете на один уровень. Для этого это не очень запутанно.
А еще функциональный способ был бы объединить все это в одно вложенное выражение списка, я думаю, что это возможно. Но это наверняка не будет более читаемым, и лично я думаю, что это непитонический (т. Е. Мне это не нравится).
Лично я бы изменил это выражение списка на цикл 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']]
Вы могли бы также рассмотреть вопрос о внесении объектов из этого. Как только у вас есть списки списков или словарей словарей, стоит подумать о создании классов.
Ну, возможно, вы * можете * втиснуть это в одно гигантское понимание списка, но это было бы еще менее удобочитаемо. Этот код создает что-то очень сложное из множества источников, мы не можем использовать эти дюжины нескольких вещей, не набирая их. Возможно, что-то улучшилось на уровне разработки (кажется, что по крайней мере три вещи хранятся избыточно в изобилии, а структура данных кажется очень странной вообще), но если вы хотите получить этот точный результат, мало кто может это сделать. – delnan
Это честный комментарий, и я согласен, так +1. Я унаследовал код и сейчас пытаюсь сделать улучшения, где могу. – urschrei