python如何从这个构建一个新的列表

时间:2012-09-13 14:43:39

标签: python

我有以下格式的列表:

['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']

知道如何优雅地完成这项工作吗?

4 个答案:

答案 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_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()) ]

答案 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.defaultdictstr.split(和其他内置字符串方法)键入list及其方法(例如appendextendsort等...),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']