簡體   English   中英

Python 嵌套字典理解與 if else

[英]Python nested dict comprehension with if else

我正在嘗試將以下內容轉換為字典理解

my_dict = {'a': None, 'b': None, 'c': ['1', '2', '3']}
new_dict = {}
 for k, v in my_dict.items():
     if not v:
         new_dict[k] = None
     else:
         for item in v:
             new_dict[f'{k}{item}'] = None

我正在嘗試將我的字典翻譯成

new_dict = {'a': None, 'b': None, 'c1': None, 'c2': None, 'c3': None}

我對基本的列表和字典理解相當滿意,但在這個方面很掙扎,目前看起來像這樣,但顯然我對語法有點偏離:

{k: None if not v else f'{k}{item}': None for item in v for k, v in my_dict.items()}

這種可憎的行為會:

{fk: None
 for k, v in my_dict.items()
 for fk in ([k] if v is None else (k + fv for fv in v))}

如果值為None ,您只需要密鑰。
如果該值不是None ,您需要一個與鍵連接的每個值的列表。
將其同質化為始終返回一個列表,一個鍵或多個:

[k] if v is None else [k + fv for fv in v]

然后你正在看一個“簡單”的嵌套理解:

{k: None for k in [['a'], ['b'], ['c1', 'c2', 'c3']] for fk in k}

我為我的回答感到自豪:

new_dict = dict(
    sum(
        [
            [(k, None)] if not value else [(f"{k}{v}", None) for v in value]
            for k, value in my_dict.items()
        ],
        [],
    )
)

...直到我看到 deceze 的回答,我仍然需要消化。

你可以在itertools.chain.from_iterable的幫助下做到這一點:

>>> {
    y: None
    for y in itertools.chain.from_iterable(
            k if not v else (f"{k}{x}" for x in v) for k, v in my_dict.items()
        )
    }
{'a': None, 'b': None, 'c1': None, 'c2': None, 'c3': None}

暫無
暫無

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

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