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

时间:2013-12-27 03:56:08

标签: python list split match arcpy

大家好, 我是一名蟒蛇初学者,试图找到解决以下问题的简单方法。

我有两个清单。每个都是一列,并且有很多行dir / path / filename.ext

A是旧列表
B是新列表

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

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

示例:

列出A
d:\地图\ Expeditions.shp
d:\地图\ Routes.shp
d:\地图\ Stations.shp
d:\地图\ Vegetation.shp

列表B
C:\项目\ Stations.shp
C:\项目\ Routes.shp
C:\项目\ Expeditions.shp
C:\项目\ Lakes.shp
C:\项目\ Mountains.shp

新列表
C:\项目\ Expeditions.shp
C:\项目\ Routes.shp
C:\项目\ Stations.shp
d:\地图\ Vegetation.shp

非常感谢!

Ĵ

1 个答案:

答案 0 :(得分:1)

# 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']