Python 如何达到这个效果
我正在使用Python2.6进行一个小项目。最后,我的清单是这样的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
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]) + '}'