在列表中搜索以按共享内容对元素进行分组

2024-10-16 20:40:15 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有这个内容的列表

[MNA1
MNA3
MNA3_1
MNA3_2
MNA2
MPA3_3
MPA3_2
MPA3_1
MPA3
MPB]

如何在一个组中获取前四个字符相同的所有值 示例

MPA3_3
MPA3_2
MPA3_1
MPA3

必须在一个组(列表)或任何其他东西中


Tags: 示例内容列表字符mpbmpa3mna1mna2
3条回答

这里有一种方法可以将您的项目分组在一起

l = [
'MNA1',
'MNA3',
'MNA3_1',
'MNA3_2',
'MNA2',
'MPA3_3',
'MPA3_2',
'MPA3_1',
'MPA3',
'MPB'
]

new_dict = {}
for item in ls:
    key = item[0:4]
    if key in new_dict.keys():
        new_dict[key].append(item)
    else:
        new_dict[key] = [item]

print(new_dict)

输出:

{'MNA1': ['MNA1'],
 'MNA2': ['MNA2'],
 'MNA3': ['MNA3', 'MNA3_1', 'MNA3_2'],
 'MPA3': ['MPA3_3', 'MPA3_2', 'MPA3_1', 'MPA3'],
 'MPB': ['MPB']}

你可以用groupby

In [13]: for g,l in groupby(lst,key=lambda x:x.split('_')[0]):
    ...:     temp = list(l)
    ...:     if len(temp) == 4:
    ...:         print temp
    ...:         
['MPA3_3', 'MPA3_2', 'MPA3_1', 'MPA3']

假设你有弦

l = [
'MNA1',
'MNA3',
'MNA3_1',
'MNA3_2',
'MNA2',
'MPA3_3',
'MPA3_2',
'MPA3_1',
'MPA3',
'MPB'
]

你能做到的

values = set([elem[:4] for elem in l])
newlist = [[elem for elem in l if elem[:4]==x] for x in values]

或者作为一个整体:

newlist = [[elem for elem in l if elem[:4]==x] for x in set([elem[:4] for elem in l])]

新列表如下所示:

 [['MNA1'],
 ['MNA3', 'MNA3_1', 'MNA3_2'],
 ['MPA3_3', 'MPA3_2', 'MPA3_1', 'MPA3'],
 ['MPB'],
 ['MNA2']]

相关问题 更多 >