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

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

4

4 回答 4

2

自从我意识到这是家庭作业后,我已经删除了完整的解决方案,但这是基本思想:

字典是一种更好的数据结构。我会看一个collections.defaultdict. 例如

yourdict = defaultdict(list)

您可以遍历您的列表(拆分每个元素':')。就像是:

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

然后你可以使用 list 方法将这些添加到字典中.append

yourdict[case].append(value)

现在,您将拥有一个将键 ( Case_1, Case_2) 映射到列表 ( ['a','b','c','d'], [...]) 的 dict。

如果你真的需要一个列表,你可以对字典的项目进行排序并适当地加入。


叹息。看起来作业标签已被删除(这是我的原始解决方案):

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()) ]
于 2012-09-13T14:46:37.810 回答
2

您可以defaultdict通过将大小写作为键来使用 a,并将每个字母附加到列表中,其中大小写和字母是通过拆分列表中的元素来获得的':'- 例如:

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,extendsort...),str.format内置sorted方法和一般 adict一般。使用此处的工作示例和最终手册作为参考——所有这些东西稍后都会派上用场——所以尽可能地理解它们符合你的最大利益。

要考虑的另一件事是具有以下内容:

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

是一种更有用的格式,无论如何都可以用来重新创建您想要的列表......

于 2012-09-13T14:52:11.843 回答
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']
于 2012-09-13T14:49:37.010 回答
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']

于 2012-09-13T14:53:04.970 回答