如何实现这一结果

时间:2012-04-16 06:09:51

标签: python list

我正在使用Python 2.6开发小项目。最后我的名单是这样的。

data = ['1:Rammmm,mmmm', '2:surr.rrrrr', '3:Sam ttttt',
'1:qqqq qqqqqqq', '2:wwwwwwwwwww', '3:eeeeeeeee','4:tttttttt',
'1:zzzzzzzzzzzzz', '2:xxxxxxxxx']

在这里,我希望在一行中显示所有1,在一行中显示所有2,等等,使用管道“|”作为分隔符。它应该是这样的,只按数字排序。

{Rammmm,mmmm|qqqq qqqqqqq|zzzzzzzzzzzzz}
{surr.rrrrr|wwwwwwwwwww|xxxxxxxxx}
{Sam ttttt|eeeeeeeee}
{tttttttt}

如何在Python中实现这一目标?

6 个答案:

答案 0 :(得分:3)

请参阅我的其他解决方案,因为我认为它比这个更好: 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}

答案 1 :(得分:0)

您将需要:

  • 将每个字符串拆分为数字部分和另一部分的方法

  • 将数字部分转换为整数的方法

  • 收集所有各个部分的方法。您需要具有相同编号部分的所有其他部分的列表。

  • 遍历列表中的所有字符串并收集所有内容。

  • 将其他部分连接在一起以形成最终结果的方法。

了解Python中可以执行的操作的一种好方法是转到Python提示符并键入help(something)。将“东西”替换为您想要的帮助。试试这些:

help(str.split)

help(str.join)

我建议您通过调用int()转换为整数。像这样:

x = "3"
n = int(x)  # n is now the integer value 3

我建议您考虑使用dict收集内容。每个dict密钥都有多个值...您需要在dict中将它们连接在一起,或者为dict中的每个密钥创建一个列表。

祝你好运!

答案 2 :(得分:0)

#!/usr/bin/python

l = ['1:Rammmm,mmmm', '2:surr.rrrrr', '3:Sam ttttt', '1:qqqq qqqqqqq', '2:wwwwwwwwwww', 3:eeeeeeeee','4:tttttttt', '1:zzzzzzzzzzzzz', '2:xxxxxxxxx']

l = [ x.split(':') for x in l ]

d ={}
for k, v in l:
  try: 
    d[k]
  except:
    d[k] = []
  d[k].append(v)

l = d.values()
l = [ "|".join(x) for x in l ]

答案 3 :(得分:0)

我认为这是一种更好的方法

>>> from collections import defaultdict
>>> data = ['1:Rammmm,mmmm', '2:surr.rrrrr', '3:Sam ttttt',
'1:qqqq qqqqqqq', '2:wwwwwwwwwww', '3:eeeeeeeee','4:tttttttt',
'1:zzzzzzzzzzzzz', '2:xxxxxxxxx']
>>> d = defaultdict(list)
>>> for num, text in (el.split(':') for el in data):
        d[int(num)].append(text)


>>> for key in sorted(d):
        print '{' + '|'.join(d[key]) + '}'


{Rammmm,mmmm|qqqq qqqqqqq|zzzzzzzzzzzzz}
{surr.rrrrr|wwwwwwwwwww|xxxxxxxxx}
{Sam ttttt|eeeeeeeee}
{tttttttt}

答案 4 :(得分:0)

我们可以这样做以获得欲望输出:

l=[]
for ls in data:
    l.append(ls[:1])
m=set(l)
for i in m:
    str=''
    for ls in data:
        if i==ls[:1]:
            str=str+ls[3:]+"|"
    print '{'+str+'}'

答案 5 :(得分:0)

可能这种变体更简单:

data = ['1:Rammmm,mmmm', '2:surr.rrrrr', '3:Sam ttttt',
        '1:qqqq qqqqqqq', '2:wwwwwwwwwww', '3:eeeeeeeee','4:tttttttt',
        '1:zzzzzzzzzzzzz', '2:xxxxxxxxx']

d = dict()
for item in data:
    k, v = item.split(':')
    # if d already has list at key 'k', append to it; 
    # otherwise, create list, and append to newly created
    d.setdefault(k,list()).append(v)

# now print formatted list in order of sorted keys (1,2,3,4)
for k in sorted(d.keys()):
    print '{' + '|'.join(d[k]) + '}'