2011-04-02 49 views

回答

3

这一个班轮会做

L = [(f1, int(f2)) for x in a.split(",") for f1, f2 in (x.split(":"),)] 

不过我可能会写,而不是

L = [] 
for x in a.split(","): 
    f1, f2 = x.split(":") 
    L.append((f1, int(f2))) 
2

试试这个:

l = [ tuple(s.split(':')) for s in a.split(',') ] 
l = [ (t[0], int(t[1])) for t in l ] 

如果您没有问题[['WOOP',2], ['DERV',2], ... ],那么即使simplier:

l = [ s.split(':') for s in a.split(',') ] 
l = [ (t[0], int(t[1])) for t in l ] 
+0

PEP需求单曲/([|])/ \ 1 /'。另外,你不会将第二项转换为int。 – delnan 2011-04-02 21:39:22

+0

它的工作原理,但我希望数字保持整数,而不是一个字符串 – Janezcka 2011-04-02 21:40:15

+0

对不起,我错过了int - 看到我更新的答案。我试图提出一行,但我脑海中的一切都过于复杂或不是最佳 – pajton 2011-04-02 21:49:04

1

我会避免在同一行这样做:

>>> s = 'WOOP:2,DERV:2,WHAT:2,MATE:1' 
>>> def convert_pair(pair): 
...  word,number = pair.split(':') 
...  return str(word),int(number) 
... 
>>> [convert_pair(pair) for pair in s.split(',')] 
[('WOOP', 2), ('DERV', 2), ('WHAT', 2), ('MATE', 1)] 

虽然我想不出在这个convert_pair这个更好的名字 时间。

+0

如果是这样的话,为什么不创建另一个参数分隔符传递到'convert_pair'分裂? – kurumi 2011-04-02 23:22:38

+0

@kurumi:有一天我会。 [YAGNI](http://en.wikipedia.org/wiki/YAGNI) – Johnsyweb 2011-04-02 23:27:05

0

如果是一个字符串,你可以使用这样的事情:

result = map(lambda x: (x.split(":")[0], int(x.split(":")[1])), a.split(",") 

如果它是一个字典,它的简单得多:

result = zip(a.keys(), a.values()) 

希望这有助于

相关问题