使用字典理解来使用 setdefault() 的替代方法?

Alternative way to use setdefault() using dictionary comprehension?

我有一个嵌套字典,它是从嵌套列表创建的,其中嵌套列表中的第一项是外部键,外部值是字典,即接下来的两项。以下代码使用两个 setdefault() 函数时效果很好,因为它只是在看到外部的重复键时才添加到嵌套字典中。我只是想知道您如何使用字典理解来执行相同的逻辑?

dict1 = {}
list1 = [[1, 2, 6],
         [1, 3, 7],
         [2, 5, 8],
         [2, 8, 9]]
    
for i in list1:
    dict1.setdefault(i[0], {}).setdefault(i[1], i[2])

输出:

 {1: {2: 6, 3: 7}, 2: {5: 8, 8: 9}}

我实际上试图达到那个结果但失败了。
理解会覆盖新条目。

之后,看了这个想法,我发现了一个类似的post,其中说明这是不可能的:

我相信 Amber 的回答最好地总结了我对 dict 理解的尝试失败的结论:

No - dict comprehensions are designed to generate non-overlapping keys with each iteration; they don't support aggregation. For this particular use case, a loop is the proper way to accomplish the task efficiently (in linear time)

使用循环,因为它的可读性和效率很高。并非所有代码都必须是 one-liner.

话虽如此,这是可能的。它滥用语法,极其不可读,效率低下,通常只是普通的错误代码(不要这样做!)

out = {k: next(gg for gg in [{}] if all(gg.setdefault(a, b) for a,b in v)) for k, v in next(g for g in [{}] if not any(g.setdefault(key, []).append(v) for key, *v in list1)).items()}

输出:

{1: {2: 6, 3: 7}, 2: {5: 8, 8: 9}}