2011-04-02 62 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()) 

希望這有助於

相關問題