Dizideki ilk üç karaktere göre benzer öğeleri bir listede gruplandırmak istiyorum. Örneğin:Bir listede nasıl benzer öğeler gruplanır?
test = ['abc_1_2', 'abc_2_2', 'hij_1_1', 'xyz_1_2', 'xyz_2_2']
nasıl grup gruba Yukarıdaki liste öğeleri harfler (örn 'abc'
) ilk gruplaşma dayalı olabilir? Aşağıdaki amaçlanan çıktı şöyledir:
output = {1: ('abc_1_2', 'abc_2_2'), 2: ('hij_1_1',), 3: ('xyz_1_2', 'xyz_2_2')}
yoksa başarılı olamadı Bunu gerçekleştirmek için itertools.groupby
kullanarak denedi
output = [['abc_1_2', 'abc_2_2'], ['hij_1_1'], ['xyz_1_2', 'xyz_2_2']]
:
>>> import os, itertools
>>> test = ['abc_1_2', 'abc_2_2', 'hij_1_1', 'xyz_1_2', 'xyz_2_2']
>>> [list(g) for k.split("_")[0], g in itertools.groupby(test)]
[['abc_1_2'], ['abc_2_2'], ['hij_1_1'], ['xyz_1_2'], ['xyz_2_2']]
ben baktım başarı olmadan aşağıdaki mesajlar:
How to merge similar items in a list. Örnek, örneğim için aşırı karmaşık olan bir yaklaşımı kullanarak benzer öğeleri (ör. 'house'
ve 'Hose'
) gruplandırır.
How can I group equivalent items together in a Python list?. Liste kavraması fikrini burada buldum.
Teşekkürler, bu harika çalışıyor. Son zamanlarda girdi listesinin sıralandığından emin olmak için iyi bir uygulama olduğunu öğrendim. 'test = sıralanmış (['abc_1_2', 'abc_2_2', 'hij_1_1', 'xyz_1_2', 'xyz_2_2'])'. Aksi takdirde, giriş listesi sıralanmazsa, "itertools.groupby" beklendiği gibi çalışmayacaktır. – Borealis
Evet, listeyi ilk sıralamak itertools.groupby'yi kullanırken iyi bir uygulamadır. Çünkü 'groupby' sadece benzer değerlerin çalışmasını yakalar. Anlam, liste sıralanmamışsa bazı özlüyor olabilir. Bunun ana konuğumun “groupby” nin nasıl kullanılacağı ve listenin zaten sıralandığından kaynaklandığından bahsetmedim. – iCodez