2017-11-29 16 views
1

예 :groupby() 그룹이 조건을 두 배로하는 방법?

import regex 
import itertools 

m = "90.80.19 90.43.19 908019 92.11.15 90.80.19 930000" 
reg = regex.compile("\d\d\.?\d\d\.?\d\d") 
[list(g) for k, g in itertools.groupby(sorted(reg.findall(m)))] 

Output: [['90.43.19'], ['90.80.19', '90.80.19'], ['908019'], ['92.11.15'], ['930000']] 

GROUPBY() 그룹은 두 배로 만 이중 90.80.19 그룹화되었다.

내가 뭘하고 싶은 위의 정규식에 그룹화하는 것입니다 : \.? 위의 정규식에서 선택 사항입니다.

Expected output: [['90.43.19'], ['90.80.19', '90.80.19', '908019'], ['92.11.15'], ['930000']] 

groupby() 그룹에 조건을 포함시킬 수 있습니까?

답변

1

맞춤을위한 itertools.groupby(iterable, key=None)key 함수를 사용하여 아래와 같이 (초기 입력 문자열 확장 하였다)

import re, itertools 

s = "90.80.19 90.43.19 908019 92.11.15 90.80.19 930000 921115" 
matches = re.findall(r'\d\d\.?\d\d\.?\d\d', s) 
result = [ list(g) for k,g in itertools.groupby(sorted(matches), 
               key=lambda x: x.replace('.', '') or x) ] 

print(result) 

출력 :

[['90.43.19'], ['90.80.19', '90.80.19', '908019'], ['92.11.15', '921115'], ['930000']]