Python 2d列表推导中传递引用的问题

时间:2017-04-20 21:52:09

标签: python list-comprehension

拿这个词典:

case_forms = {'plural': {'nominative': 'dni', 'locative': 'dniach'}, 
              'singular': {'instrumental': 'dniem', 'vocative': 'dzie\xc5\x84'}}

我想获得一个可用作case_forms[a][b]的所有(a,b)密钥对的列表。

没问题,对吗?双重列表理解。在Haskell一直做这样的事情:

[(number, case_name) for case_name in case_dict.keys() for number, case_dict in case_forms.items()]

除非这不会产生您期望的结果:

[('plural', 'instrumental'),
 ('singular', 'instrumental'),
 ('plural', 'vocative'),
 ('singular', 'vocative')]

我想知道如何解决这个问题。没有多少巧妙放置[:]似乎可以做到这一点。

1 个答案:

答案 0 :(得分:2)

这个怎么样:

[ (number, case_name) for number, case_dict in case_forms.items() for case_name in case_dict.keys() ]

编辑引用@ juanpa.arrivillaga关于为什么我的例子表现得很奇怪的评论:

  

Python 2列表推导具有漏洞范围,并且它没有使用您认为的case_dict,它使用了之前理解的case_dict(泄漏到外部范围中)

     

启动新的解释器会话,您将获得NameError