Skip to main content
 首页 » 编程设计

python之创建一个以列表中元素的长度为键的字典

2025年05月04日12dflying

我有一个列表,其中有多个元素作为元组存储在列表中,我想创建一个字典,其中键的长度为 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')] 

我试过了 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')]}``` 

请您参考如下方法:

您可以尝试在其中包含列表推导式的字典推导式

temp_dict = {len(i): [x for x in combination if len(x) == len(i)] for i in combination} 
print(temp_dict) 

或者您可以使用setdefault:

temp_dict = {} 
for i in combination: 
    temp_dict.setdefault(len(i), []).append(i) 
print(temp_dict) 

两个输出:

{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')]}