我有如下格式的目錄建立一個新的列表:蟒蛇如何從這個
['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']
任何想法如何優雅地完成這件事?
我有如下格式的目錄建立一個新的列表:蟒蛇如何從這個
['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']
任何想法如何優雅地完成這件事?
您可以通過處理情況作爲重點,並追加到列表中的每個字母,其中情況下使用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.defaultdict
,str.split
(和其他內置字符串方法),在內置型list
和它的方法(如append
,extend
,sort
等...),str.format
,內建sorted
方法,一般一個dict
一般來說。這裏使用工作示例與最後手動沿着參考 - 所有這些東西會派上用場後來 - 所以它是在你最感興趣盡你所能去了解他們。其他
有一點要考慮的是,有這樣的:
{1: ['a', 'b', 'c', 'd'], 2: ['e', 'f', 'g', 'h']}
是多了很多有用的格式,並且可用於事後反正重建所需列表...
@mgilson我對它有兩個想法(因爲它已被重新標記),但用點計算出工作答案是足夠合理的... –
我沒有意識到它被重新標記。這是一個很好的解決方案。 – mgilson
我已經刪除了我完整的解決方案,因爲我意識到這是功課,但這裏的基本思想是:
字典是一個更好的數據結構。我想看看一個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_1
,Case_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()) ]
+1總是去類似案例的字典 – katamayros
只需對'.split()'調用稍作調整,就可以修改代碼以處理「Case_23:CSI:Miami」元素的情況。 – DSM
Em,對不起,我是一個noob。什麼是「標記爲家庭作業」? –
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']
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']
第二個列表並不真正優雅。一個字典鍵=>列表可能會更好看 – njzk2
這個功課是否完全?我知道有人添加了該標籤,但它不是OP。 –