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表示我们正在帮助他或她完成一项学校作业,在这一点上,你可以帮助他们自己解决问题。需要提示、建议,而不是完整的解决方案。标签是自愿性的,例如,你不能把它添加到没有证据的问题中@