将主列表中的类似项目分组,并根据分组项目创建新列表

Kri*_* G. 4 python list

我试图从一个主列表创建几个新列表,其中新列表包含主列表中的类似项目.具体来说,我有一份巴士路线清单.这是一个示例数据集:

[u'Bus04_00_00_IB_pts_Line', u'Bus04_00_00_OB_pts_Line', u'Bus15_00_00_IB_pts_Line', u'Bus15_00_00_OB_pts_Line']
Run Code Online (Sandbox Code Playgroud)

大多数公交线路有一个入站(IB)和一个出站(OB)项目(有些有多个IB和OB,有些只有一条路由,b/c它们是循环路由).最后,我想在地图软件中合并IB和OB路线(我已经知道该怎么做)......

我最初创建了文件名,因此前5个字符代表总线路径,无论它是IB还是OB.因此,我可以根据前5个字符对相似的项目进行分组.例如,当我写:

for route in routes:
    print route[0:5]
Run Code Online (Sandbox Code Playgroud)

我明白了:

>>> 
Bus04
Bus04
Bus15
Bus15
Run Code Online (Sandbox Code Playgroud)

我怎样才能"团",涉及到的文件Bus04Bus04,和Bus15Bus15成新的列表,这样,我得到:

[u'Bus04_00_00_IB_pts_Line', u'Bus04_00_00_OB_pts_Line'][u'Bus15_00_00_IB_pts_Line', u'Bus15_00_00_OB_pts_Line']作为单独的名单?

我正在考虑循环遍历每个项目的内容,查看每个项目的前五个字符,然后创建一个新列表,每个新的五个字符项出现(并将该项添加到新列表)或检查是否列表已存在并将类似项附加到其中.

我很难在代码中写出来,所以非常感谢任何帮助!

NPE*_*NPE 6

我会用collections.defaultdict这个:

import collections

L = [u'Bus04_00_00_IB_pts_Line', u'Bus04_00_00_OB_pts_Line', u'Bus15_00_00_IB_pts_Line', u'Bus15_00_00_OB_pts_Line']
d = collections.defaultdict(list)
for elem in L:
    d[elem.split('_')[0]].append(elem)
print(dict(d))
Run Code Online (Sandbox Code Playgroud)

这会产生:

{u'Bus04': [u'Bus04_00_00_IB_pts_Line', u'Bus04_00_00_OB_pts_Line'],
 u'Bus15': [u'Bus15_00_00_IB_pts_Line', u'Bus15_00_00_OB_pts_Line']}
Run Code Online (Sandbox Code Playgroud)

与目前提出的一些其他解决方案不同,无论条目在输入列表中出现的顺序如何,这都有效.