匹配不同列表中相同的元素并用新元素替换旧元素

2024-06-13 14:47:30 发布

您现在位置:Python中文网/ 问答频道 /正文


大家好,
我是python初学者,正在尝试为以下问题提供一个简单的解决方案。你知道吗

我有两张单子。每一列都是一列,有许多行dir/path/文件名.ext

A是旧列表
B是新名单

我想创建一个新列表,这将是此工作流的结果:
1在列表A的第一行中查找文件名
2在列表B中的任何位置查找匹配的文件名(这将是唯一的,因此不会出现重复的问题)
三。如果找到匹配项,用B的路径替换A的路径
4遍历列表A的所有行。

最终结果应该是一个列表变量,其中所有旧路径(a)都被新路径(B)替换。如果没有找到匹配项,则旧路径将保持不变。

示例:

列表A
D:\地图\探险队.shp
D:\地图\路线.shp
D:\地图\站点.shp
D:\地图\植被.shp

列表B
C:\项目\站点.shp
C:\项目\路线.shp
C:\项目\探险队.shp
C:\项目\湖泊.shp
C:\项目\山.shp

新建列表 C:\项目\探险队.shp
C:\项目\路线.shp
C:\项目\站点.shp
D:\地图\植被.shp

非常感谢!你知道吗

日本


Tags: path项目路径列表站点文件名dir地图
1条回答
网友
1楼 · 发布于 2024-06-13 14:47:30
# function to return filename from path
fname = lambda x: x.split("\\")[-1]

# list of filepaths in list a that have no corresponding file name in list b
r1 = [x for x in lista if not fname(x) in map(fname, listb)]

# list of filepaths in list b that have a corresponding file name in list a
r2 = [x for x in listb if fname(x) in map(fname, lista)]

result = r1 + r2

将产生预期结果:

['D:\\Maps\\Vegetation.shp', 'C:\\Project\\Stations.shp', 'C:\\Project\\Routes.shp', 'C:\\Project\\Expeditions.shp']

相关问题 更多 >