创建一个字典,将列表中元素的长度作为键

Muk*_*rma 1 python dictionary list

我有一个列表,其中有多个作为元组存储在列表中的元素,我想创建一个字典,其中键的长度为1,2等,而各个长度的元素。清单的例子是

combination = [('A',), ('B',), ('C',), ('D',), ('A', 'B'), ('A','C'),
 ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D'), ('A', 'B', 'C'), 
('A', 'B', 'D'), ('A', 'C', 'D'), ('B', 'C', 'D'),('A', 'B', 'C', 'D')]
Run Code Online (Sandbox Code Playgroud)

我试过了 temp_dict = {len(i): i for i in combinations}

所需的输出是

{1: [('A',), ('B',), ('C',), ('D',)], 2: [('A', 'B'), ('A','C'),
 ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')], 3: [('A', 'B', 'C'), 
('A', 'B', 'D'), ('A', 'C', 'D'), ('B', 'C', 'D')], 4: [('A', 'B', 'C', 'D')]}```
Run Code Online (Sandbox Code Playgroud)

U10*_*ard 6

您可以尝试其中包含列表理解的字典理解

temp_dict = {len(i): [x for x in combination if len(x) == len(i)] for i in combination}
print(temp_dict)
Run Code Online (Sandbox Code Playgroud)

或者您可以使用setdefault

temp_dict = {}
for i in combination:
    temp_dict.setdefault(len(i), []).append(i)
print(temp_dict)
Run Code Online (Sandbox Code Playgroud)

两者输出:

{1: [('A',), ('B',), ('C',), ('D',)], 2: [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')], 3: [('A', 'B', 'C'), ('A', 'B', 'D'), ('A', 'C', 'D'), ('B', 'C', 'D')], 4: [('A', 'B', 'C', 'D')]}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个完全有效的解决方案,但对于大字典来说效率很低,因为O(n ^ 2) (2认同)