2014-03-13 107 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