我正在写一本字典。在
我有一本这样的字典:
main_dict = {
'A' : {'key1' : 'valueA1', 'key2' : 'valueA2'},
'B' : {'key2' : 'valueB2', 'key3' : 'valueB3'},
'C' : {'key3' : 'valueC3', 'key1' : 'valueC1'}}
我想执行以下逻辑:
^{pr2}$结果如下:
{'key3': [['C', 'valueC3'], ['B', 'valueB3']],
'key2': [['A', 'valueA2'], ['B', 'valueB2']],
'key1': [['A', 'valueA1'], ['C', 'valueC1']]}
(我知道我可以使用defaultdict(list)
,但这只是一个例子)
我想使用dict理解来执行逻辑,目前我有以下内容:
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']}
这是为每个内部密钥找到的最后一个实例。。。在
我不知道如何正确地执行这个嵌套列表理解。我试过多种变体,都比上一个更糟。在
你可以试试这样的方法:
使用
^{pr2}$dict.setdefault
更具可读性的解决方案:一种选择是使用itertools.groupby
根据您的数据和性能要求,排序可能并不理想,因此值得分析。在
此外,它不会产生指定的dict,而是groupby对象。这可能已经足够满足您的需求了;迭代它会产生key和iterable。在
使用三个字典理解来完成这一任务,第三个dict理解是将前两个dict结合起来:
相关问题 更多 >
编程相关推荐