看我其他的解决方案,因为我相信这是比这更好的一个: https://stackoverflow.com/a/10173807/1219006
>>> from operator import itemgetter
>>> from itertools import groupby
>>> data = ['1:Rammmm,mmmm', '2:surr.rrrrr', '3:Sam ttttt',
'1:qqqq qqqqqqq', '2:wwwwwwwwwww', '3:eeeeeeeee','4:tttttttt',
'1:zzzzzzzzzzzzz', '2:xxxxxxxxx']
>>> sorted_data = sorted(((int(x),y) for x,y in (el.split(':') for el in data)),key=itemgetter(0))
>>> for k,v in groupby(sorted_data,key=itemgetter(0)):
print '{' + '|'.join(text for num,text in v) + '}'
{Rammmm,mmmm|qqqq qqqqqqq|zzzzzzzzzzzzz}
{surr.rrrrr|wwwwwwwwwww|xxxxxxxxx}
{Sam ttttt|eeeeeeeee}
{tttttttt}
测试
>>> data = ['1:Rameshrrrrrrr', '2:Sureshmmmmmm', '3:Samkkkkkkkk', '1:tttttttttt', '2:wwwwwwwwwwwwwwwww', '3:yyyyyyyyy', '4:gggggggggg', '1:qqqqqqqqqqq', '2:hhhhhhhhh']
>>> sorted_data = sorted(((int(x),y) for x,y in (el.split(':') for el in data)),key=itemgetter(0))
>>> for k,v in groupby(sorted_data,key=itemgetter(0)):
print '{' + '|'.join(text for num,text in v) + '}'
{Rameshrrrrrrr|tttttttttt|qqqqqqqqqqq}
{Sureshmmmmmm|wwwwwwwwwwwwwwwww|hhhhhhhhh}
{Samkkkkkkkk|yyyyyyyyy}
{gggggggggg}
这是完美的工作。但排序应该是numbers.all 1的第一,所有2的第二,然后3's.But不是文本例如:{Sam ttttt | eeeeeeeee} 我想要这样,但上面的代码排序文本也(我不想) 请纠正这是我的mailid: [email protected] – user1335606 2012-04-16 07:49:37
好吧,我添加了'key = itemgetter(0)'到'sorted'函数,所以现在它只按数字排序。 – jamylak 2012-04-16 08:01:31
list = ['1:Rameshrrrrrrr','2:Sureshmmmmmm','3:Samkkkkkkkk','1:tttttttttt','2:wwwwwwwwwwwwwwwww','3:yyyyyyyyy','4:gggggggggg','1:qqqqqqqqqqq ','2:hhhhhhhhh'] 删除了“key = itemgetter(0)”,并且还尝试了它的排序文本,我想要这样的东西。 {Rameshrrrrrrr | tttttttttt | qqqqqqqqqqq} { Sureshmmmmmm | wwwwwwwwwwwwwwwww | hhhhhhhhh} { Samkkkkkkkk | YYYYYYYYY} – user1335606 2012-04-16 08:19:46