我正在使用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中实现这一目标?
答案 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]) + '}'