Pythonic从嵌套字典生成列表的方法

时间:2014-02-26 00:18:51

标签: python python-2.7 dictionary iteration list-comprehension

在Python 2.7中工作,我有一个带有一些引用数据的嵌套字典,我想从中生成一个成功构造的引号列表。目前,我是这样做的:

result = []
for nameStr, nameData in dataTbl.iteritems():
    for valueDate, record in nameData.iteritems():
        quote = histRecordToQuote(securitiesDict = securitiesDict,
                                  nameStr        = nameStr,
                                  valueDate      = valueDate,
                                  record         = record)
        if quote:
            result.append(quote)

有更多的Pythonic方法吗?我有预感,我们可以通过列表理解更快或更清晰。函数histRecordToQuote()在由于数据错误而无法构造引号时返回None。你可以建议一个不同的签名,我很乐意重写它以获得更清晰/更快的代码。

非常感谢。

修改

字典结构的一个例子:

{'IBM':  {'20140215':2.53, '20140216':2.55},
 'MSFT': {'20140213':2.45, '20140216':0.},
 'AMZN': {'20140212':0., '20140214':2.59}}

参数securitiesDict是外部参数,需要在Quote内构建histRecordToQuote()类。

histRecordToQuote()的输出会返回None的0价格记录,并构建有效的Quote

Quote('IBM', '20140215', 2.53)
Quote('IBM', '20140216', 2.55)
Quote('MSFT', '20140213', 2.45)
None
Quote('AMZN', '20140214', 2.59)
None

我的最终输出必须是有效引号列表:

[Quote('IBM', '20140215', 2.53),
Quote('IBM', '20140216', 2.55),
Quote('MSFT', '20140213', 2.45),
Quote('AMZN', '20140214', 2.59)]

1 个答案:

答案 0 :(得分:2)

您可以通过嵌套理解实现相同的目标:

[ quote for quote in
    (histRecordToQuote(securitiesDict = securitiesDict,
                       nameStr        = nameStr,
                       valueDate      = valueDate,
                       record         = record)
      for nameStr, nameData in dataTbl.iteritems()
        for valueDate, record in nameData.iteritems())
    if quote ]