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}
我正在尝试将以下内容转换为听写理解
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}