我试图从一个主列表创建几个新列表,其中新列表包含主列表中的类似项目.具体来说,我有一份巴士路线清单.这是一个示例数据集:
[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)
我怎样才能"团",涉及到的文件Bus04和Bus04,和Bus15和Bus15成新的列表,这样,我得到:
[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']作为单独的名单?
我正在考虑循环遍历每个项目的内容,查看每个项目的前五个字符,然后创建一个新列表,每个新的五个字符项出现(并将该项添加到新列表)或检查是否列表已存在并将类似项附加到其中.
我很难在代码中写出来,所以非常感谢任何帮助!
我会用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)
与目前提出的一些其他解决方案不同,无论条目在输入列表中出现的顺序如何,这都有效.
| 归档时间: |
|
| 查看次数: |
1481 次 |
| 最近记录: |