2014-03-13 26 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的動態組元素列表

因此,以'2040bl'開頭的子列表將以自己的組結尾,全部在同一個列表中。將所得的列表將具有所得的7長度,因爲有7個唯一的ID標籤(在每個子列表第一個元素)

我在蟒3

回答

3

可以使用itertools.groupby方法。有了您的數據,它似乎可以開箱即用。例如:

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