【问题标题】:How to save a list of string in sublists according specific expression?如何根据特定表达式将字符串列表保存在子列表中?
【发布时间】:2020-05-24 11:29:48
【问题描述】:

我正在编写一个脚本来将读取路径保存在子列表中。假设我有 400 个文件路径保存在一个列表中,每个路径都有特定的语法 Ci_whaterver.csv,那么在我的路径列表中我有这样的内容:

pathlist=[C1_01.csv,C1_02.csv,...,Cn_01.csv,Cn_02.csv] 

我想在这种情况下最终订购或排序pathlistf

pathlistf=[[C1_01.csv,C1_02.csv,...],[C2_01.csv,C2_02.csv,...],...,[Cn_01.csv,Cn_02.csv,...]]

我不知道以这种方式重新排列路径。

你好,我遇到了这个问题: 我想问一些与过去案例非常相似的问题,假设我有下一条路径: path=[case1_Qxxx_cap1_whatever.csv,case1_Qxxx_cap1_whatever2.csv,case1_Qxxx_cap1_whatever3.csv,....,case1_Qxxx_cap2_whatever.csv,case1_Qxxx_cap2_whatever2.csv,case1_Qxxx_cap2_whatever3.csv,case2_Qxxx_cap1_whatever.csv,case2_Qxxx_cap1_whatever2.csv,...,case2_Qxxx_cap2_whatever.csv,case2_Qxxx_cap2_whatever2.csv]

我想要这个:

pathf=[[[case1_Qxxx_cap1_whatever.csv,case1_Qxxx_cap1_whatever2.csv,...],[case1_Qxxx_cap2_whatever.csv,Qxxx_cap2_whatever2.csv,...]],[[case2_Qxxx_cap1_whatever.csv,case2_Qxxx_cap1_whatever2.csv,...],[case2_Qxxx_cap2_whatever.csv,case2_Qxxx_cap2_whatever2.csv,...]]]

【问题讨论】:

  • 我不知道要重新安排这条路你不知道从哪里开始?

标签: python python-3.x list arraylist path


【解决方案1】:

一种方法是创建一个dictionary 并使用Ci 部分作为键,以Ci 开头的文件名列表将作为值。例如,取pathlist = ['C1_01.csv','C1_02.csv', 'C2_01.csv' , 'C3_01.csv', 'C2_02.csv'],然后我们将创建一个字典来存储

{'C1': ['C1_01.csv', 'C1_02.csv'], 'C2': ['C2_01.csv', 'C2_02.csv'], 'C3': ['C3_01.csv']}

代码如下:

pathlist = ['C1_01.csv','C1_02.csv', 'C2_01.csv' , 'C3_01.csv', 'C2_02.csv']
d = {}
for path in pathlist:
    if path[:2] not in d:
        d[path[:2]] = [path]
    else:
        d[path[:2]].append(path)
pathlistf = []
for key in d:
    pathlistf.append(d[key])
print(pathlistf)
# Output: [['C1_01.csv', 'C1_02.csv'], ['C3_01.csv'], ['C2_01.csv', 'C2_02.csv']]

希望这能解决问题。如有任何疑问,请随时提出。

【讨论】:

  • 非常感谢先生,这正是我想要的,谢谢!
【解决方案2】:

如果pathlist是预排序的,可以基于itertools.groupby使用下面的代码。

from itertools import groupby
pathlist=['Cn_01.csv', 'C1_02.csv', 'C9_01.csv', 'C9_02.csv', 'Ca_01.csv', 'C9_03.csv', 'Ca_02.csv', 'C1_01.csv', 'Cn_02.csv']
pathlist.sort()
groupedfilenames = (list(g) for _, g in groupby(pathlist, key=lambda a: a[:2]))
print(list(groupedfilenames))

输出:

[['C1_01.csv', 'C1_02.csv'], ['C9_01.csv', 'C9_02.csv', 'C9_03.csv'], ['Ca_01.csv', 'Ca_02.csv'], ['Cn_01.csv', 'Cn_02.csv']]

【讨论】:

    猜你喜欢
    • 2022-09-27
    • 2017-04-19
    • 1970-01-01
    • 2015-10-01
    • 2018-10-24
    • 2021-08-05
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多