拿这个词典:
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')]
我想知道如何解决这个问题。没有多少巧妙放置[:]
似乎可以做到这一点。
答案 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