2017-11-29 4 views
1

例:groupby()グループに条件を2倍にする方法?

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']] 
関連する問題