2012-09-13 71 views
1

我有如下格式的目錄建立一個新的列表:蟒蛇如何從這個

['CASE_1:a','CASE_1:b','CASE_1:c','CASE_1:d', 
'CASE_2:e','CASE_2:f','CASE_2:g','CASE_2:h'] 

我想創建一個新的列表,它看起來像這樣的:

['CASE_1:a,b,c,d','CASE_2:e,f,g,h'] 

任何想法如何優雅地完成這件事?

+1

第二個列表並不真正優雅。一個字典鍵=>列表可能會更好看 – njzk2

+1

這個功課是否完全?我知道有人添加了該標籤,但它不是OP。 –

回答

2

您可以通過處理情況作爲重點,並追加到列表中的每個字母,其中情況下使用defaultdict並且這封信是通過拆分':'上的列表元素獲得的 - 例如:

from collections import defaultdict 

case_letters = defaultdict(list) 
start = ['CASE_1:a','CASE_1:b','CASE_1:c','CASE_1:d', 'CASE_2:e','CASE_2:f','CASE_2:g','CASE_2:h'] 
for el in start: 
    case, letter = el.split(':') 
    case_letters[case].append(letter) 
result = sorted('{case}:{letters}'.format(case=key, letters=','.join(values)) for key, values in case_letters.iteritems()) 
print result 

由於這是功課(編輯:或者是!?) - 我建議在看collections.defaultdictstr.split(和其他內置字符串方法),在內置型list和它的方法(如appendextendsort等...),str.format,內建sorted方法,一般一個dict一般來說。這裏使用工作示例與最後手動沿着參考 - 所有這些東西會派上用場後來 - 所以它是在你最感興趣盡你所能去了解他們。其他

有一點要考慮的是,有這樣的:

{1: ['a', 'b', 'c', 'd'], 2: ['e', 'f', 'g', 'h']} 

是多了很多有用的格式,並且可用於事後反正重建所需列表...

+0

@mgilson我對它有兩個想法(因爲它已被重新標記),但用點計算出工作答案是足夠合理的... –

+0

我沒有意識到它被重新標記。這是一個很好的解決方案。 – mgilson

2

我已經刪除了我完整的解決方案,因爲我意識到這是功課,但這裏的基本思想是:

字典是一個更好的數據結構。我想看看一個collections.defaultdict。例如

yourdict = defaultdict(list) 

您可以通過列表(splitting each element':')迭代。喜歡的東西:

#only split string once -- resulting in a list of length 2. 
case, value = element.split(':',1) 

然後你可以使用列表.append方法把它們添加到字典:

yourdict[case].append(value) 

現在,您可以使用的鍵映射的字典(Case_1Case_2)到列表( ['a','b','c','d'], [...])。

如果你確實需要一個清單,你可以sort字典的項目,適當地加入。


嘆息。它看起來像功課標籤已被刪除(這是我原來的解決方案):

from collections import defaultdict 
d = defaultdict(list) 
for elem in yourlist: 
    case, value = elem.split(':', 1) 
    d[case].append(value) 

現在你有一本字典,因爲我上面描述。如果你真的想要得到你的列表返回:

new_lst = [ case+':'+','.join(values) for case,values in sorted(d.items()) ] 
+0

+1總是去類似案例的字典 – katamayros

+0

只需對'.split()'調用稍作調整,就可以修改代碼以處理「Case_23:CSI:Miami」元素的情況。 – DSM

+0

Em,對不起,我是一個noob。什麼是「標記爲家庭作業」? –

0
data = ['CASE_1:a','CASE_1:b','CASE_1:c','CASE_1:d', 'CASE_2:e','CASE_2:f','CASE_2:g','CASE_2:h'] 

output = {} 

for item in data: 
    key, value = item.split(':') 
    if key not in output: 
     output[key] = [] 
    output[key].append(value) 

result = [] 
for key, values in output.items(): 
    result.append('%s:%s' % (key, ",".join(values))) 


print result 

輸出

['CASE_2:e,f,g,h', 'CASE_1:a,b,c,d'] 
0
mydict = {} 
for item in list: 
    key,value = item.split(":") 
    if key in mydict: 
     mydict[key].append(value) 
    else: 
     mydict[key] = [value] 
[key + ":" + ",".join(value) for key, value in mydict.iteritems()] 

沒有多少優雅,說實話。你知道,我會把你的名單存儲爲一個字典,因爲它實際上是一個字典。

輸出是['CASE_2:e,f,g,h', 'CASE_1:a,b,c,d']