基于子字符串的列表元素拆分

2024-06-12 13:07:41 发布

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

如何基于点之前的字符串拆分此元素中的元素,而不显式地在代码中编写它

lst = ['ds_a.cola','ds_a.colb','ds_b.cola','ds_b.colb']

因为“ds”有两种变体。我要两张单子

lst_dsa = ['ds_a.cola','ds_a.colb']
lst_dsb = ['ds_b.cola','ds_b.colb']

我的旧代码是:

lst_dsa = []
lst_dsb = []
for item in lst :
    if "ds_a" in item:
        lst_dsa.append(item)
    else:
        lst_dsb.append(item)

但我不能用这个,因为可能有两个以上,比如,ds_c,ds_d。。。。 如何在python中实现这一点


Tags: 字符串代码in元素fords变体item
3条回答

试试itertools.groupby

>>> from itertools import groupby
>>> [list(v) for _, v in groupby(lst, key=lambda x: x[x.find('_') + 1])]
[['ds_a.cola', 'ds_a.colb'], ['ds_b.cola', 'ds_b.colb']]
>>> 

使用dict并保存数据

from collections import defaultdict
lst = ['ds_a.cola','ds_a.colb','ds_b.cola','ds_b.colb','ds_x.cola','ds_x.colb']
data = defaultdict(list)
for entry in lst:
  a,_ = entry.split('.')
  data[a].append(entry)
print(data)

输出

defaultdict(<class 'list'>, {'ds_a': ['ds_a.cola', 'ds_a.colb'], 'ds_b': ['ds_b.cola', 'ds_b.colb'], 'ds_x': ['ds_x.cola', 'ds_x.colb']})

您可以映射它们:

from collections import defaultdict

lst = ['ds_a.cola','ds_a.colb','ds_b.cola','ds_b.colb']
ds_dict = defaultdict(list)

for item in lst:
    key, value = item.split(".")
    ds_dict[key].append(value)

print(dict(ds_dict))

输出:

{'ds_a': ['cola', 'colb'], 'ds_b': ['cola', 'colb']}

相关问题 更多 >