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

use*_*103 5 python split group-by list python-2.7

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

mylist = [['a1'],['a2'],['c1'],['b1']]
a = [['a1'],['a2']]
b = [['b1']]
c = [['c1']]
Run Code Online (Sandbox Code Playgroud)

重要的是我将它们保存为列表列表(即使它只是每个小列表中的一个元素).

谢谢

Ósc*_*pez 6

这将起作用:

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)]
Run Code Online (Sandbox Code Playgroud)

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

编辑 :

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

result_dict = {k: list(g) for k, g in it.groupby(mylist, keyfunc)}
Run Code Online (Sandbox Code Playgroud)

现在答案在字典中按第一个字符键入:

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

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

result_dict['c']
> [['c1']]
Run Code Online (Sandbox Code Playgroud)

  • 不错的解决方案,但也许应该明确指出,如果列表中有“d1”,代码会崩溃。也就是说,用`result_dict = {k: list(g) for k, g in it.groupby(mylist, keyfunc)}`替换最后一行会更好,然后将字母作为键,列表作为项目。 .. (2认同)