[英]3 level nested dictionary comprehension in Python
我有一個 Python 字典如下:
d = {'1': {'1': 3, '2': 1, '3': 1, '4': 4, '5': 2, '6': 3},
'2': {'1': 3, '2': 3, '3': 1, '4': 2},
'3': {'1': 1, '2': 1, '3': 3, '4': 2, '5': 1, '6': 1, '7': 1},
'4': {'1': 1, '2': 1, '3': 3, '4': 2, '5': 1, '6': 1, '7': 1}}
我在字典上有這個操作:
D = {}
for ko, vo in d.items():
for ki, vi in vo.items():
for i in range(vi):
D[f'{ko}_{ki}_{i}'] = someFunc(ko, ki, i)
我想將其翻譯成具有字典理解的單行如下:
D = {f'{ko}_{ki}_{i}': someFunc(ko, ki, i) for i in range(vi) for ki, vi in vo.items() for ko, vo in d.items()}
但我收到一個錯誤
NameError: 名稱 'vi' 未定義
有人可以幫助我使用正確的語法來實現這一目標嗎?
循環的順序必須顛倒。
這就是你要找的:
D = {f'{ko}_{ki}_{i}': someFunc(ko, ki, i) for ko, vo in d.items() for ki, vi in vo.items() for i in range(vi) }
列表推導式中的for
子句的出現順序應與等效的 for 循環代碼中的順序相同。 唯一“移動”的是最里面的賦值被開頭的表達式替換。
詳情請參閱https://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/ 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.