簡體   English   中英

Python 中的 3 級嵌套字典理解

[英]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.

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