【问题标题】:Ensure that same name files will always match?确保同名文件始终匹配?
【发布时间】:2018-11-19 14:02:39
【问题描述】:

我有两个列表: 这个:

列表1

['C:\\Users\\user\\Desktop\\programs1\\merge\\AST\\AST.shp',
 'C:\\Users\\user\\Desktop\\programs1\\merge\\ASTI\\ASTI.shp',
 'C:\\Users\\user\\Desktop\\programs1\\merge\\ASTO\\ASTO.shp']

还有这个:

列表2

['C:\\Users\\user\\Desktop\\programs\\merge\\AST\\AST.shp',
 'C:\\Users\\user\\Desktop\\programs\\merge\\ASTI\\ASTI.shp',
 'C:\\Users\\user\\Desktop\\programs\\merge\\AWE\\AWE.shp',  #THIS IS EXTRA
 'C:\\Users\\user\\Desktop\\programs\\merge\\ASTO\\ASTO.shp']

然后压缩:

final = [(f,s) for f,s in zip(list1,list2)]
final

如何保证pairs与zip后其他列表中对应的同名匹配?

也许我们与他们以前的文件夹匹配? 喜欢:

if list1[0].split('\\')[-2] == list2[0].split('\\')[-2]:
      final = [(f,s) for f,s in zip(list1,list2)]
      final

【问题讨论】:

  • zip 保留顺序。我不清楚你在问什么。
  • 在第二个列表中,第三个项目在第一个列表中不存在。会配对错误
  • 那么所有后续项目也会如此吗?
  • 是的,这就是为什么它需要做一些条件来确保它能够很好地配对。
  • 为什么不[x for x in list1 if x in list2]?你需要zip 做什么?

标签: python list loops


【解决方案1】:

我希望我能正确理解您想要获得匹配的对(例如,基于您的示例中的倒数第二个文件夹 - 您可以根据您想要的条件进行自定义)。然后我会做的是这样的:

dict1 = {path.split('\\')[-2]: path for path in list1}
dict2 = {path.split('\\')[-2]: path for path in list2}
common = set(dict1) & set(dict2)
pairs = [(dict1[element], dict2[element]) for element in common]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多