Skip to main content
 首页 » 编程设计

python之将所有元素放在具有相同名称的字典形式中

2025年05月04日13落叶

我有一个列表,例如:

list=["Chrm_23-56_python_regius","Chrm_3-89_elephant_regius", 
      "Chrm_13-56_monkey_regius","Chrm_13-34_rat_regius","Chrm_67-123_python_regius", 
      "chrm_90-345_elephant_regius","Chrm_67-124_monkey_regius", 
      "Chrm_345-456_rat_regius","Chrm_789-1000_python_regius"] 

想法是将所有元素放在具有相同名称(没有number-number)部分的dict 表单中。 并得到类似的东西:

dict = {'key1': ['Chrm_23-56_python_regius','Chrm_67-123_python_regius','Chrm_789-1000_python_regius'], 
        'key2': ['Chrm_3-89_elephant_regius','chrm_90-345_elephant_regius'], 
        'key3': ['Chrm_13-56_monkey_regius','Chrm_67-124_monkey_regius'], 
        'key4': ['Chrm_13-34_rat_regius','Chrm_345-456_rat_regius']} 

如您所见,例如,在 key1 中,3 个值(不带数字)是 = to Chrm__python_regius。

我知道如何在没有 number-number 部分的情况下查看哪个元素相同:

for i in list: 
    print(re.sub(r'[\d]+[-]+[\d]+', '',i) 

但我不知道如何创建一个 dict 并在相同的键中添加具有相同名称结构的值。有人有想法吗?

请您参考如下方法:

使用正则表达式:--> re.sub(r"\d*\-\d*", "", i)

例如:

import re 
from collections import defaultdict 
lst=["Chrm_23-56_python_regius","Chrm_3-89_elephant_regius","Chrm_13-56_monkey_regius","Chrm_13-34_rat_regius","Chrm_67-123_python_regius","chrm_90-345_elephant_regius","Chrm_67-124_monkey_regius","Chrm_345-456_rat_regius","Chrm_789-1000_python_regius"] 
 
result = defaultdict(list) 
for i in lst: 
    result[re.sub(r"\d*\-\d*", "", i)].append(i) 
print(result) 

输出:

defaultdict(<type 'list'>, {'Chrm__elephant_regius': ['Chrm_3-89_elephant_regius'], 'Chrm__python_regius': ['Chrm_23-56_python_regius', 'Chrm_67-123_python_regius', 'Chrm_789-1000_python_regius'], 'Chrm__monkey_regius': ['Chrm_13-56_monkey_regius', 'Chrm_67-124_monkey_regius'], 'Chrm__rat_regius': ['Chrm_13-34_rat_regius', 'Chrm_345-456_rat_regius'], 'chrm__elephant_regius': ['chrm_90-345_elephant_regius']})