【发布时间】:2012-12-20 08:06:27
【问题描述】:
我正在尝试编写字典理解。
我有一本这样的字典:
main_dict = {
'A' : {'key1' : 'valueA1', 'key2' : 'valueA2'},
'B' : {'key2' : 'valueB2', 'key3' : 'valueB3'},
'C' : {'key3' : 'valueC3', 'key1' : 'valueC1'}}
我要执行以下逻辑:
d = {}
for k_outer, v_outer in main_dict.items():
for k_inner, v_inner in v_outer.items():
if k_inner in d.keys():
d[k_inner].append([k_outer, v_inner])
else:
d[k_inner] = [[k_outer, v_inner]]
产生以下结果:
{'key3': [['C', 'valueC3'], ['B', 'valueB3']],
'key2': [['A', 'valueA2'], ['B', 'valueB2']],
'key1': [['A', 'valueA1'], ['C', 'valueC1']]}
(我知道我可以使用defaultdict(list),但这只是一个例子)
我想使用 dict-comprehension 执行逻辑,到目前为止我有以下内容:
d = {k : [m, v] for m, x in main_dict.items() for k, v in x.items()}
这不起作用,它只会给我以下输出:
{'key3' : ['B', 'valueB3'],
'key2' : ['B', 'valueB2'],
'key1' : ['C', 'valueC1']}
为每个 inner_key 找到的最后一个实例是什么...
我不知道如何正确执行此嵌套列表理解。我尝试了多种变体,都比上一个差。
【问题讨论】:
-
为清楚起见,您能否向我们展示您对示例输入的期望输出?
-
您确定将所有这些逻辑放入字典理解中是个好主意吗?有时可读性胜过几行代码。
-
@PeterStahl 你显然没玩过Code Golf
-
@AlexL 好吧,如果只是为了打高尔夫球,那也没关系。 ;)
-
为什么这被标记为“性能”?您是想获得最快的版本,还是使用最少临时内存的版本?
标签: python performance list-comprehension dictionary-comprehension