按每个元素中的字符拆分python列表

时间:2012-05-13 11:36:36

标签: python list group-by split python-2.7

我有一个python列表,其中包含一个包含字母和数字字符串的列表,我想知道如何将字符串拆分为字符串开头的字符,而不为每个字符创建一个语句。 所以我想将mylist拆分为列表a,b和c。

mylist = [['a1'],['a2'],['c1'],['b1']]
a = [['a1'],['a2']]
b = [['b1']]
c = [['c1']]

将它们保存为列表列表非常重要(即使每个小列表中只有一个元素)。

由于

3 个答案:

答案 0 :(得分:4)

这将有效:

import itertools as it

mylist  = [['a1'],['a2'],['c1'],['b1']]
keyfunc = lambda x: x[0][0]

mylist = sorted(mylist, key=keyfunc)
a, b, c = [list(g) for k, g in it.groupby(mylist, keyfunc)]

仅当sorted()中的元素尚未按字符串开头的字符排序时,才需要使用mylist的行。

编辑:

正如评论中所指出的,一个更通用的解决方案(不会将变量数限制为三个)将使用字典理解(在Python 2.7+中可用),如下所示:

result_dict = {k: list(g) for k, g in it.groupby(mylist, keyfunc)}

现在答案是通过第一个字符键入字典:

result_dict['a']
> [['a1'],['a2']]

result_dict['b']
> [['b1']]

result_dict['c']
> [['c1']]

答案 1 :(得分:2)

使用字典也可以工作

mylist = [['a1'],['a2'],['c1'],['b1']]

from collections import defaultdict

dicto = defaultdict(list)

for ele in mylist:
    dicto[ele[0][0]].append(ele)

结果:

>>> dicto
defaultdict(<type 'list'>, {'a': [['a1'], ['a2']], 'c': [['c1']], 'b': [['b1']]})

它没有给出你要求的确切结果;但是,访问与每个字母相关的列表列表非常容易

>>> dicto['a']
[['a1'], ['a2']]

答案 2 :(得分:0)

您还可以使用简单的函数获取这些子列表:

def get_items(mylist, letter):
  return [item for item in mylist if item[0][0] == letter]

表达式item[0][0]只是意味着获取当前项的第一个元素的第一个字母。然后,您可以为每个字母调用该函数:

a = get_items(mylist, 'a')
b = get_items(mylist, 'b')
c = get_items(mylist, 'c')