gpt4 book ai didi

python - zip 列表基于多对一关系

转载 作者:太空宇宙 更新时间:2023-11-03 14:17:37 24 4
gpt4 key购买 nike

我有两个列表,我想找到一种通过压缩将它们链接在一起的方法(我不确定这样做的确切术语)。

在 list 一中,我有一系列的 tif 文件:

    list1=['LT50300281984137PAC00_sr_band1.tif',
,'LT50300281984137PAC00_sr_band2.tif'
'LT50300281984137PAC00_sr_band3.tif','LT50300281994260XXX03_sr_band1.tif',
'LT50300281994260XXX03_sr_band2.tif',
'LT50300281994260XXX03_sr_band3.tif']

在列表二中我有两个文件:

list2=[LT50300281984137PAC00_mask.tif,LT50300281994260XXX03_mask.tif]

我想压缩列表一中以 LT50300281984137PAC00 开头的文件列表 2 中以相同方式开始的文件,以 LT50300281994260XXX03 开头的文件也是如此

我试过的代码是:

ziplist=zip(sorted(list1),sorted(list2)

但这会返回:

[('LT50300281984137PAC00_sr_band1', 'LT50300281984137PAC00_mask.tif'), ('LT50300281984137PAC00_sr_band2', 'LT50300281994260XXX03_mask.tif')] 

我想退回这个:

 [('LT50300281984137PAC00_sr_band1',LT50300281984137PAC00_sr_band2,LT50300281984137PAC00_sr_band3, 'LT50300281984137PAC00_mask.tif'), ('LT50300281994260XXX03_sr_band1.tif', 'LT50300281994260XXX03_sr_band2.tif','LT50300281994260XXX03_sr_band3.tif','LT50300281994260XXX03_mask.tif')] 

最佳答案

您可以使用 itertools.groupby :

from itertools import groupby

list1 = [
'LT50300281984137PAC00_sr_band1.tif',
'LT50300281984137PAC00_sr_band2.tif',
'LT50300281984137PAC00_sr_band3.tif',
'LT50300281994260XXX03_sr_band1.tif',
'LT50300281994260XXX03_sr_band2.tif',
'LT50300281994260XXX03_sr_band3.tif'
]

list2 = [
'LT50300281984137PAC00_mask.tif',
'LT50300281994260XXX03_mask.tif'
]

def extract_key(s):
return s[:s.index('_')]

l = sorted(list1 + list2, key=extract_key)
l = [tuple(items) for s, items in groupby(l, key=extract_key)]

结果:

[('LT50300281984137PAC00_sr_band1.tif', 'LT50300281984137PAC00_sr_band2.tif', 'LT50300281984137PAC00_sr_band3.tif', 'LT50300281984137PAC00_mask.tif'), ('LT50300281994260XXX03_sr_band1.tif', 'LT50300281994260XXX03_sr_band2.tif', 'LT50300281994260XXX03_sr_band3.tif', 'LT50300281994260XXX03_mask.tif')]

想法是根据每个文件名的第一部分 (extract_key) 对两个列表的并集进行排序。然后使用 groupby 创建相同第一部分的组。

关于python - zip 列表基于多对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31932773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com