更多Pythonic(或可能是功能)创建此列表的方式?

时间:2011-02-10 12:24:40

标签: python functional-programming

我正在返回列表清单,但以下内容似乎比应该更复杂:

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 个答案:

答案 0 :(得分: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']]

您可能还想考虑制作对象。只要你有词典列表或字典列表,就应该考虑改编课程。