我最近遇到了(類似于)以下情況。考慮以下字典串列。
dics = [{'a':'a',
'b':[{'a':'a'},
{'a':'b'},
{'a':'c'},
{'a':'d'},
{'a':'e'}]},
{'a':'a',
'b':[{'a':'a'}]}]
我想要一個與所有最里面的字典中的鍵 'a' 對應的值的串列,這些字典又列在鍵 'b' 下。當然,我們可以通過以下 for 回圈來實作:
result = []
for d1 in dics:
for d2 in d1['b']:
result.append(d2['a'])
但是,我希望使用串列理解來做到這一點。現在,我發現
result = [[d2['a'] for d2 in d1['b']] for d1 in dics]
結果在串列中[['a', 'b', 'c', 'd', 'e'], ['a']],所以有理由(或者我認為)
result = [d2['a'] for d2 in d1['b'] for d1 in dics]
會產生“扁平化”串列['a', 'b', 'c', 'd', 'e', 'a'],這就是我想要的。然而,我實際得到的是 list ['a', 'a']。這里發生了什么?
uj5u.com熱心網友回復:
你有向后的雙回圈的內回圈和外回圈。試試看:
result = [d2['a'] for d1 in dics for d2 in d1['b']]
實際上,令人驚訝的是
[d2['a'] for d2 in d1['b'] for d1 in dics]
沒有導致 NameError 因為在外部回圈d1['b']中未定義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/435225.html
