簡體   English   中英

提取第二層嵌套字典中的所有鍵

[英]Extract all keys in the second level of nested dictionary

我想提取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循環:

all = []
for ww in ['a', 'b']:
    for ele in adict[ww]:
        all.append(ele)

請注意,循環順序保持不變。 另外,我刪除了.keys() ,這是沒有必要的,因為默認情況下,對dict的迭代發生在鍵上。


您也可以像Jon Clements一樣出色 ,執行以下操作:

In [265]: set().union(*adict.values())
Out[265]: {'aa', 'aaa', 'bb', 'bbb', 'cc', 'ccc'}

*adict.values()返回內部字典的列表,將其鍵解包然后添加到集合中。 一些指針:

  1. 不能保證訂購(即使在python3.6上)

  2. 重復項被刪除

adict = {'b': {'aaa': 444, 'ccc': 666, 'bbb': 555}, 'a': {'aa': 111, 'cc': 333, 'bb': 222}}

[key for nested_dict_key, nested_dict_value in adict.iteritems() for key, value in nested_dict_value.iteritems()]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM