2017-05-29 52 views
0

我的下一个string如何将此字符串转换为Python中的多维列表?

string = 'tuned  1372    root 6u  REG    8,3  4096 102029349 /tmp/ffiabNswC (deleted)\ngmain  1372 2614   root 6u  REG    8,3  4096 102029349 /tmp/ffiabNswC (deleted)\n' 

我需要的string的每一个元素放入list1[0][..],但是当我看到一个新行“\ n”,我已经把下一个元素融入list1[1][..]

多维列表,像这样:

list1 = [["tuned", "1372", "root", "6u", "REG", "8,3", "4096", "102029349", "/tmp/ffiabNswC", "(deleted)"], 
     ["gmain", "1372", "2614", "root", "6u", "REG", "8,3", "4096", "102029349", "/tmp/ffiabNswC", "(deleted)"]] 

split做到这一点,但它把我都在同一个维度。

回答

5

分割首先由新线(获取行),然后通过空间分割每个元素(以获得每列):

data = "tuned 1372 root 6u REG 8,3 4096 102029349 /tmp/ffiabNswC (deleted)\ngmain 1372 2614 root 6u REG 8,3 4096 102029349 /tmp/ffiabNswC (deleted)\n" 

parsed = [elements.split() for elements in data.strip().split("\n")] # `strip()` removes the last whitespace so we don't get blank elements 

print(parsed) 

# [['tuned', '1372', 'root', '6u', 'REG', '8,3', '4096', '102029349', '/tmp/ffiabNswC', '(deleted)'], ['gmain', '1372', '2614', 'root', '6u', 'REG', '8,3', '4096', '102029349', '/tmp/ffiabNswC', '(deleted)']] 
+0

太谢谢你了!它工作完美 - – koteo

1

下面的函数应该为你做到这一点:

f = lambda list: [sublist.split(' ') for sublist in list.split('\n')] 

只需拨打电话f(string)即可。

如果还你不想在你的子列表的任何空条目,你可以做

f = lambda list: [sublist.split(' ') for sublist in list.split('\n') if sublist] 
+0

非常感谢! – koteo

0

既然你要拆分的字符串转换成线,然后将线进入的话,你可以使用一个修真

result = [line.split() for line in string.split('\n')] 

输出:

[['tuned', '1372', 'root', '6u', 'REG', '8,3', '4096', '102029349', '/tmp/ffiabNswC', '(deleted)'], 
['gmain', '1372', '2614', 'root', '6u', 'REG', '8,3', '4096', '102029349', '/tmp/ffiabNswC', '(deleted)'], 
[]] 

如果您不希望最终空白(BEC因为最后的\n)你可以在split之前strip

+0

感谢chthonicdaemon。 – koteo

0

呦可以使用列表解析为以下几点:

string = 'tuned  1372    root 6u  REG    8,3  4096 102029349 /tmp/ffiabNswC (deleted)\ngmain  1372 2614   root 6u  REG    8,3  4096 102029349 /tmp/ffiabNswC (deleted)\n' 
print [x.split() for x in string.strip().split('\n')] 

输出:

[['tuned', '1372', 'root', '6u', 'REG', '8,3', '4096', '102029349', '/tmp/ffiabNswC', '(deleted)'], ['gmain', '1372', '2614', 'root', '6u', 'REG', '8,3', '4096', '102029349', '/tmp/ffiabNswC', '(deleted)']] 
+0

谢谢Moe A !!! – koteo

1

输入: -

string = 'tuned 1372 root 6u REG 8,3 4096 102029349 /tmp/ffiabNswC 
(deleted)\ngmain 1372 2614 root 6u REG 8,3 4096 102029349 /tmp/ffiabNswC 
(deleted)\n' 

代码: - 只要写

mylist=string.split() 

输出: -

[tuned 
1372 
root 
6u 
REG 
8,3 
4096 
102029349 
/tmp/ffiabNswC 
(deleted) 
gmain 
1372 
2614 
root 
6u 
REG 
8,3 
4096 
102029349 
/tmp/ffiabNswC 
(deleted)] 
+0

谢谢,Vic13,但我需要一个多维列表。 – koteo

0

由于你的帮助,从来就试图做的值的字典的列表内,it's很大。

这是它,它的工作原理。我开始爱上列表理解!

dict1 = { i.split()[0]: (i.split()[1:]) for i in data.strip().split('\n') } 

输出:

dict1 
{'gmain': ['1372', 
'2614', 
'root', 
'6u', 
'REG', 
'8,3', 
'4096', 
'102029349', 
'/tmp/ffiabNswC', 
'(deleted)'], 
'tuned': ['1372', 
'root', 
'6u', 
'REG', 
'8,3', 
'4096', 
'102029349', 
'/tmp/ffiabNswC', 
'(deleted)']} 
相关问题