2014-03-13 5 views
3
[('20bgx6', 'HQ', 'Head Quarters'), 
('2040bl', 'NVA', 'North Vietnamese Army '), 
('2040bl', 'HEAT', 'High Explosive Anti Tank '), 
('2040bl', 'HEAT', 'High Explosive Anti Tank '), 
('202kon', 'HEAT', 'High Explosive Anti Tank '), 
('202kon', 'EFP', 'Explosively Formed Penetrator/Projectile'), 
('202kon', 'NCO', 'Non-commissioned officer'), 
('202kon', 'MRAP', 'Mine Resistant Ambush Protected'), 
('202kon', 'UXO', 'Unexploded Ordnance'), 
('202kon', 'MP', 'Military Police'), 
('202kon', 'CQ', 'Charge of Quarters'), 
('202kon', 'HQ', 'Head Quarters'), 
('202kon', 'NCO', 'Non-commissioned officer'), 
('1zz081', 'BC', 'Battalion Commander'), 
('1zz081', 'HMMWV', 'High Mobility Multi Wheeled Vehicle'), 
('1zz081', 'SALUTE', 'Size Activity Location Uniform Time Equipment '), 
('1zxpbs', 'NCO', 'Non-commissioned officer'), 
('1ztrv6', 'SALUTE', 'Size Activity Location Uniform Time Equipment '), 
('1ztrv6', 'HEAT', 'High Explosive Anti Tank '), 
('1ztrv6', 'BDU', 'Battle Dress Uniform, predecessor to the ACU'), 
('1zs9gz', 'AG', 'Adjutant General'), 
('1zs9gz', 'HEAT', 'High Explosive Anti Tank ')] 

그와 동일한 목록을 가지므로 모든 요소가 그룹으로 구성되어야합니다. 동일한 ID 태그 (2040bl, 202kon 등)는 자체 하위 목록에 있습니다.Python 3.x는 목록의 공통 요소로 2 차원 목록의 요소를 동적으로 그룹화합니다.

따라서 '2040bl'로 시작하는 하위 목록은 모두 같은 목록에있는 자체 그룹에서 끝납니다. 7 개 고유 한 ID 태그 (각 하위 목록에서 첫 번째 요소) 당신은 itertools.groupby 방법을 사용할 수 있습니다 내가 파이썬 3

답변

3

에있어

이 같은 결과 목록은 (7)의 결과 길이가됩니다. 귀하의 데이터와 함께 그것은 밖으로 작동합니다 것 같습니다.

from itertools import groupby 
for k, v in groupby(l, key=lambda t: t[0]) # assuming your list is stored in l 
    print('%s\n\t%s' % (k, list(v))) 

윌 출력 : 중요

20bgx6 
     [('20bgx6', 'HQ', 'Head Quarters')] 
2040bl 
     [('2040bl', 'NVA', 'North Vietnamese Army '), ('2040bl', 'HEAT', 'High Explosive Anti Tank '), ('2040bl', 'HEAT', 'High Explosive Anti Tank ')] 
202kon 
     [('202kon', 'HEAT', 'High Explosive Anti Tank '), ('202kon', 'EFP', 'Explosively Formed Penetrator/Projectile'), ('202kon', 'NCO', 'Non-commissioned officer'), ('202kon', ' 
MRAP', 'Mine Resistant Ambush Protected'), ('202kon', 'UXO', 'Unexploded Ordnance'), ('202kon', 'MP', 'Military Police'), ('202kon', 'CQ', 'Charge of Quarters'), ('202kon', 'HQ', ' 
Head Quarters'), ('202kon', 'NCO', 'Non-commissioned officer')] 
1zz081 
     [('1zz081', 'BC', 'Battalion Commander'), ('1zz081', 'HMMWV', 'High Mobility Multi Wheeled Vehicle'), ('1zz081', 'SALUTE', 'Size Activity Location Uniform Time Equipment ') 
] 
1zxpbs 
     [('1zxpbs', 'NCO', 'Non-commissioned officer')] 
1ztrv6 
     [('1ztrv6', 'SALUTE', 'Size Activity Location Uniform Time Equipment '), ('1ztrv6', 'HEAT', 'High Explosive Anti Tank '), ('1ztrv6', 'BDU', 'Battle Dress Uniform, predecess 
or to the ACU')] 
1zs9gz 
     [('1zs9gz', 'AG', 'Adjutant General'), ('1zs9gz', 'HEAT', 'High Explosive Anti Tank ')] 

: groupby를 사용하는 경우 데이터가 예를 들어 그들이있는 그룹 키에 의해 정렬 할 필요가있다 예를 들어. 그렇지 않으면 그룹화 전에 sorted(l, key=lambda t:t[0])을 추가 할 수 있습니다.

+0

완벽하게 작동합니다. 감사합니다. – user2719977