Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何达到这个效果_Python_List - Fatal编程技术网

Python 如何达到这个效果

Python 如何达到这个效果,python,list,Python,List,我正在使用Python2.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

我正在使用Python2.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 | qqqqqqqqq | zzzzzzzzz} {surr.rrrrr | WWWWWW | xxxxxxxxx} {Sam ttttttt | eeeeeeeee} {tttttttt}
如何在Python中实现这一点?

请参阅我的其他解决方案,因为我相信它比此解决方案更好:

试验

您将需要:

将每个字符串拆分为数字部分和其他部分的方法

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

收集所有不同部分的方法。您需要具有相同零件号的所有其他零件的列表

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

将其他部分连接在一起以获得最终结果的方法

了解您可以在Python中做什么的一个好方法是转到Python提示符并键入helpsomething。用你需要帮助的东西来代替某物。试试这些:

helpstr.split

helpstr.join

我建议您通过调用int来转换为整数。如下所示:

x = "3"
n = int(x)  # n is now the integer value 3
我建议你考虑用DICT来收集东西。每个dict键将有多个值。。。你需要在dict中将它们连接在一起,或者为dict中的每一个做一个列表


祝你好运

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

#!/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 ]
>>> 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}

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

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+'}'

可能这个变体会更简单:

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]) + '}'

您应该使用defaultdict,而不是try:d[k]。此外,字典是无序的,因此您的输出可能正确,也可能不正确。这很好。但排序应该是数字。所有1的第一个,所有2的第二个,然后是3的。但不是文本Ex:{Sam ttttttt | eeeeeeeee}我想要这样,但上面的代码排序文本也是我不想要的,请更正这是我的mailid:ramesh。chowdary03@gmail.comOk我补充说,,key=itemgetter0到排序函数,所以现在它只按数字排序。list=['1:rameshrrrrrr','2:sureshmmmmm','3:samkkkkkkk','1:tttttttttt','2:wwwwwwwwwwwwwwwwwwwwwwwwwwwwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy。{rameshrrrrrrrr | tttttttttttt | qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq?我用更新后的代码试过了,得到了你想要的结果。这只在有一位数的数字时有效。另外,一个集合是无序的,因此这可能会也可能不会产生正确的输出。
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+'}'
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]) + '}'