我想提取 2d 字典第二级中的所有键,但 python 解释器返回 NameError。我的预期结果是 ['aa', 'bb', 'cc', 'aaa', 'bbb', 'ccc']
>>> adict
defaultdict(<class 'dict'>, {'b': {'aaa': 444, 'ccc': 666, 'bbb': 555}, 'a': {'aa': 111, 'cc': 333, 'bb': 222}})
>>> all = [ele for ele in adict[ww].keys() for ww in ['a', 'b']]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ww' is not defined
你很接近了。您只需要重新排序循环:
all = [ele for ww in ['a', 'b'] for ele in adict[ww] ]
要理解原因,请考虑如何编写正常的for
loop:
all = []
for ww in ['a', 'b']:
for ele in adict[ww]:
all.append(ele)
请注意,循环的顺序保持不变。另外,我已经放弃了.keys()
,这是没有必要的,因为迭代dict
默认情况下发生在按键上。
你也可以像乔恩·克莱门茨一样出色 https://stackoverflow.com/questions/45652155/how-to-extract-all-keys-in-second-level-of-2d-dictionary/45652179?noredirect=1#comment78262729_45652179并执行以下操作:
In [265]: set().union(*adict.values())
Out[265]: {'aa', 'aaa', 'bb', 'bbb', 'cc', 'ccc'}
*adict.values()
返回内部字典的列表,其键被解包然后添加到集合中。一些提示:
不保证顺序(即使在 python3.6 上)
重复项被删除
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)