Python 将具有相同名称的所有元素放在dict表单中
我有一份清单,例如:Python 将具有相同名称的所有元素放在dict表单中,python,regex,Python,Regex,我有一份清单,例如: 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_re
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"]
其思想是将所有元素放在一个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个值(不带数字)是=到Chrm\uu python\u regius
我知道如何通过执行以下操作,在没有编号的情况下查看哪个元素是相同的:
for i in list:
print(re.sub(r'[\d]+[-]+[\d]+', '',i)
但我不知道如何创建一个dict
,并在相同的键中添加具有相同名称结构的值。有人有想法吗?使用itertools.groupby
:
import itertools
func = lambda x:x.split('_')[-2]
l = sorted(l, key=func)
d = {'key%s' % i: list(g) for i, (k,g) in enumerate(itertools.groupby(l, func))}
{'key0': ['Chrm_3-89_elephant_regius', 'chrm_90-345_elephant_regius'],
'key1': ['Chrm_13-56_monkey_regius', 'Chrm_67-124_monkey_regius'],
'key2': ['Chrm_23-56_python_regius',
'Chrm_67-123_python_regius',
'Chrm_789-1000_python_regius'],
'key3': ['Chrm_13-34_rat_regius', 'Chrm_345-456_rat_regius']}
注:
func
part创建一个函数,从给定的iterable
的每个元素中提取所需的键
itertools.groupby
假定对iterable
进行排序。因此,sorted
或list.sort
在使用前是必需的
itertools.groupby
然后返回分组对象
使用
itertools.groupby
:
import itertools
func = lambda x:x.split('_')[-2]
l = sorted(l, key=func)
d = {'key%s' % i: list(g) for i, (k,g) in enumerate(itertools.groupby(l, func))}
{'key0': ['Chrm_3-89_elephant_regius', 'chrm_90-345_elephant_regius'],
'key1': ['Chrm_13-56_monkey_regius', 'Chrm_67-124_monkey_regius'],
'key2': ['Chrm_23-56_python_regius',
'Chrm_67-123_python_regius',
'Chrm_789-1000_python_regius'],
'key3': ['Chrm_13-34_rat_regius', 'Chrm_345-456_rat_regius']}
注:
func
part创建一个函数,从给定的iterable
的每个元素中提取所需的键
itertools.groupby
假定对iterable
进行排序。因此,sorted
或list.sort
在使用前是必需的
itertools.groupby
然后返回分组对象
使用regex:-->re.sub(r“\d*\-\d*”,“”,i)
Ex:
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']})
输出:
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']})
[中国的3-89岁的大象(大象)是一头大象,这是一个中国的大象(大象)是一个中国的,”Chrm(中国的3-89岁的大象(大象)是一个中国的,”Chrm(中国的)、Chrm(中国的)、Chrom(中国的)和“Chrom(中国的)罗马罗马罗马罗马罗马3-89中国的大象(大象)是一个中国的王)的)、Chromm(中国的python(中国的)和中国的)python(中国的)王)的)政府)以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下的一些::::::,,,,,,,,,,[中国的“中国的“中国的“中国的中国的中国的罗马罗马罗马(中国的大象(中国的大象(大象)大象)大象(大象)是)是他们)是第1-456条[区域],'chrm_elephant_regius':['chrm_90-345_elephant_regius']]
使用regex:-->re.sub(r“\d*\-\d*”,“”,i)
Ex:
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']})
输出:
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']})
[中国的3-89岁的大象(大象)是一头大象,这是一个中国的大象(大象)是一个中国的,”Chrm(中国的3-89岁的大象(大象)是一个中国的,”Chrm(中国的)、Chrm(中国的)、Chrom(中国的)和“Chrom(中国的)罗马罗马罗马罗马罗马3-89中国的大象(大象)是一个中国的王)的)、Chromm(中国的python(中国的)和中国的)python(中国的)王)的)政府)以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下的一些::::::,,,,,,,,,,[中国的“中国的“中国的“中国的中国的中国的罗马罗马罗马(中国的大象(中国的大象(大象)大象)大象(大象)是)是他们)是第1-456条[区域],'chrm_elephant_regius':['chrm_90-345_elephant_regius']]
你可能想解释一下它是如何工作的,新手理解起来相当复杂。从这一点上,你知道我如何以升序的方式对每个键中的值进行排序,并从以下位置获取值:
key0':['Chrm_100-500_elephant_regius','Chrm_0-80_elephant_regius']
到key0':['Chrm_0-80_elephant_regius','Chrm_100-500_elephant_regius']
?@Chris NewLambdaWithNewKey是什么?@chipkycentra尝试使用排序(g)
而不是列表(g)
。让我知道你想做哪一个整数。你可能想解释这是如何工作的,对于新手来说这相当复杂。从这一点上,你知道我如何以升序方式对每个键中的值进行排序,并从以下位置获得例如:key0':['Chrm_100-500_elephant_regius','Chrm_0-80_elephant_regius']
到key0':['Chrm_0-80_elephant_regius','Chrm_100-500_elephant_regius']
?@Chris NewLambdaWithNewKey是什么?@chippycentra尝试使用排序(g)
而不是列表(g)
。让我知道您要排序的整数