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

从嵌套字典生成列表的Pythonic方法,python,python-2.7,dictionary,iteration,list-comprehension,Python,Python 2.7,Dictionary,Iteration,List Comprehension,在Python2.7中,我有一个嵌套字典,其中包含一些引号数据,我想从中生成一个成功构造引号的列表。目前,我是这样做的: result = [] for nameStr, nameData in dataTbl.iteritems(): for valueDate, record in nameData.iteritems(): quote = histRecordToQuote(securitiesDict = securitiesDict,

在Python2.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)
有没有更像蟒蛇的方法?我有一个预感,我们可以做得更快或更清楚的列表理解。函数
histRecordToQuote()
在由于数据错误而无法构造quote时返回
None
。您可以建议一个不同的签名,我很乐意重写它以获得更清晰/更快的代码

多谢各位

编辑

字典结构的一个示例:

{'IBM':  {'20140215':2.53, '20140216':2.55},
 'MSFT': {'20140213':2.45, '20140216':0.},
 'AMZN': {'20140212':0., '20140214':2.59}}
参数
securitiesDict
是外部的,它是在
histRecordToQuote()中构造
Quote
类所必需的

对于0-price记录,
histRecordToQuote()
的输出将返回
None
,并从其余记录构造有效的
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)]

您可以通过嵌套理解实现同样的效果:

[ 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 ]

你能提供一个清晰的dict结构示例吗?以及所需的输出吗?@Totem请参阅update@JDavidSmith我输入了预期的函数输出,以及我想要的最终输出。谢谢。这会更快吗?列表比较快于累加器,但不要期望出现令人眼花缭乱的差异。配置它并尝试!速度不应该是这里的动力(那时可能会令人沮丧)。使用理解将你绑在一件紧身胸衣上,这可以防止很多其他可能的错误。除了速度外,python方法还有实际优势。