我有以下格式的列表:
['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']
知道如何优雅地完成这项工作吗?
答案 0 :(得分: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
方法将这些添加到dict:
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 :(得分: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.defaultdict
,str.split
(和其他内置字符串方法)键入list
及其方法(例如append
,extend
,sort
等...),str.format
,内置sorted
方法和通常一般为dict
。使用此处的工作示例以及最终手册供参考 - 所有这些事情将在以后派上用场 - 所以最好尽可能地了解它们。
要考虑的另一件事是拥有类似的东西:
{1: ['a', 'b', 'c', 'd'], 2: ['e', 'f', 'g', 'h']}
是一个非常有用的格式,无论如何都可以用来重新创建你想要的列表......
答案 2 :(得分: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']
答案 3 :(得分: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()]
说实话并不是很优雅。你知道,我将你的列表存储为dict,因为它实际上就像一个dict一样。
输出为['CASE_2:e,f,g,h', 'CASE_1:a,b,c,d']