[英]List comprehension with pattern match in Python
我有一个名为columns的列表,我必须根据元素的拆分(前三个)创建一个嵌套列表。
例如,我将这个元素“101 Drive 1 A”分成“101 Drive 1”并组成一个组。
columns = ['101 Drive 1 A','101 Drive 1 B','102 Drive 2 A','102 Drive 2 B','102 Drive 2 C','103 Drive 1 A']
输出将如下所示:
[
['101 Drive 1 A', '101 Drive 1 B'],
['102 Drive 2 A', '102 Drive 2 B', '102 Drive 2 C'],
['103 Drive 1 A']
]
一种使用collections.defaultdict
的方法:
from collections import defaultdict
columns = ['101 Drive 1 A', '101 Drive 1 B', '102 Drive 2 A', '102 Drive 2 B', '102 Drive 2 C', '103 Drive 1 A']
groups = defaultdict(list)
for column in columns:
key = column[:3]
groups[key].append(column)
res = list(groups.values())
print(res)
输出
[['101 Drive 1 A', '101 Drive 1 B'], ['102 Drive 2 A', '102 Drive 2 B', '102 Drive 2 C'], ['103 Drive 1 A']]
一个更健壮的替代方法,适用于字符串开头的任何数字,是使用正则表达式:
import re
groups = defaultdict(list)
for column in columns:
key = re.match("\d+", column).group()
groups[key].append(column)
res = list(groups.values())
print(res)
直接使用itttools的grouby :
from itertools import groupby
mask = [list(group) for k, group in groupby(columns, lambda s: s.partition(' ')[0])]
print(mask)
给#
[
['101 Drive 1 A', '101 Drive 1 B'],
['102 Drive 2 A', '102 Drive 2 B', '102 Drive 2 C'],
['103 Drive 1 A']
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.