python如何从这个列表中构建新列表

python如何从这个列表中构建新列表,python,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'] 你知道如何优雅地完成这项工作吗?我已经删除了我的完整解决方案,因为我意识到这是家庭作业,但以下是基本想法: 字典是更好的数据结构。我会看一本书。e、 g 您可以在列表中进行迭代(在:')

我有以下格式的列表:

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

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

我已经删除了我的完整解决方案,因为我意识到这是家庭作业,但以下是基本想法:

字典是更好的数据结构。我会看一本书。e、 g

您可以在列表中进行迭代(在
:'
)。比如:

#only split string once -- resulting in a list of length 2.
case, value = element.split(':',1) 
{1: ['a', 'b', 'c', 'd'], 2: ['e', 'f', 'g', 'h']}
然后,您可以使用list
。append
方法将这些内容添加到dict中:

yourdict[case].append(value)
现在,您将有一个dict,它将键(
Case_1
Case_2
)映射到列表(
['a'、'b'、'c'、'd']、[…])

如果您确实需要一个列表,您可以选择字典中的项目并适当地加入


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

现在你有了我上面描述的字典。如果您真的想找回您的列表:

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

当我意识到这是家庭作业时,我已经删除了我的完整解决方案,但基本思路如下:

字典是更好的数据结构。我会看一本书。e、 g

您可以在列表中进行迭代(在
:'
)。比如:

#only split string once -- resulting in a list of length 2.
case, value = element.split(':',1) 
{1: ['a', 'b', 'c', 'd'], 2: ['e', 'f', 'g', 'h']}
然后,您可以使用list
。append
方法将这些内容添加到dict中:

yourdict[case].append(value)
现在,您将有一个dict,它将键(
Case_1
Case_2
)映射到列表(
['a'、'b'、'c'、'd']、[…])

如果您确实需要一个列表,您可以选择字典中的项目并适当地加入


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

现在你有了我上面描述的字典。如果您真的想找回您的列表:

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

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

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

您可以使用
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
因为这是家庭作业(edit:or was!!?)-我建议查看
collections.defaultdict
str.split
(和其他内置字符串方法),在内置类型
列表及其方法(如
append
extend
sort
等),
str.format
,内置的
sorted
方法,通常是
dict
。使用此处的工作示例以及最终手册作为参考-所有这些东西稍后都会派上用场-因此尽可能了解它们符合您的最大利益

另一件需要考虑的事情是:有这样的事情:

#only split string once -- resulting in a list of length 2.
case, value = element.split(':',1) 
{1: ['a', 'b', 'c', 'd'], 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
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()]
因为这是家庭作业(edit:or was!!?)-我建议查看
collections.defaultdict
str.split
(和其他内置字符串方法),在内置类型
列表及其方法(如
append
extend
sort
等),
str.format
,内置的
sorted
方法,通常是
dict
。使用此处的工作示例以及最终手册作为参考-所有这些东西稍后都会派上用场-因此尽可能了解它们符合您的最大利益

另一件需要考虑的事情是:有这样的事情:

#only split string once -- resulting in a list of length 2.
case, value = element.split(':',1) 
{1: ['a', 'b', 'c', 'd'], 2: ['e', 'f', 'g', 'h']}
是一种非常有用的格式,可用于以后重新创建所需列表

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

老实说,不太优雅。你知道,我会将你的列表存储为dict,因为它实际上表现为dict


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

第二个列表不是很优雅。dict key=>列表可能看起来更好这是家庭作业吗?我知道有人加了那个标签,但它不是OP。第二个列表不是很优雅。dict key=>列表可能看起来更好这是家庭作业吗?我知道有人添加了该标记,但它不是OP。只需对
.split()
调用稍作调整,就可以修改代码来处理元素“case_23:CSI:Miami”的情况。@Bob:这意味着OP表明我们正在帮助他或她完成学校作业,在这一点上,你可以帮助他们自己解决问题。需要提示、建议,而不是完整的解决方案。标记是自愿性的,例如,您不能只将其添加到没有证据的问题中。@Bob每个问题都有与之关联的“标记”。您在提交此问题时将其标记为“python”。显然,有人修改了你的帖子并添加了“家庭作业”标签。当我看到“家庭作业”标签时,通常意味着我不想给出完整的解决方案。然而,由于家庭作业标签显然是错误的,我已经发布了我的完整解决方案。@mgilson正因为如此-对于Pythonic解决方案,给你+1是公平的,当它被认为是家庭作业时,给你提示:)@MartijnPieters:看,谢谢;在mgilson:我不是这篇文章的作者,但谢谢你的回答。只需对
.split()
调用稍作调整,代码就可以被修改以处理一个元素的情况,即“case\u 23:CSI:Miami”。@Bob:这意味着OP表示我们正在帮助他或她完成一项学校作业,在这一点上,你可以帮助他们自己解决问题。需要提示、建议,而不是完整的解决方案。标签是自愿性的,例如,你不能把它添加到没有证据的问题中@