我有一个列表,例如:
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']})
