Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将具有相同名称的所有元素放在dict表单中_Python_Regex - Fatal编程技术网

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)
。让我知道您要排序的整数