我有一个以下格式的列表:
['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']
知道如何优雅地完成这项工作吗?
我有一个以下格式的列表:
['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']
知道如何优雅地完成这项工作吗?
自从我意识到这是家庭作业后,我已经删除了完整的解决方案,但这是基本思想:
字典是一种更好的数据结构。我会看一个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()) ]
您可以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
,extend
等sort
...),str.format
内置sorted
方法和一般 adict
一般。使用此处的工作示例和最终手册作为参考——所有这些东西稍后都会派上用场——所以尽可能地理解它们符合你的最大利益。
要考虑的另一件事是具有以下内容:
{1: ['a', 'b', 'c', 'd'], 2: ['e', 'f', 'g', 'h']}
是一种更有用的格式,无论如何都可以用来重新创建您想要的列表......
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']
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']