gpt4 book ai didi

python按字符串匹配模式对列表项进行分组

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:45 25 4
gpt4 key购买 nike

我需要像这样对类似的项目进行分组:

['bty_char_rick_10', 'shd_char_rick_10', 'refl_char_rick_10', 'spec_char_rick_10'], ['bty_char_toby_01', 'shd_char_toby_01'], ['bty_prop_item_01', 'shd_prop_item_01'] ...]

已经席卷了整个互联网,但找不到任何关于字符串操作的信息。应该是一个简单的 fnmatch 或字符串匹配,但我无法让它工作。

from itertools import groupby

lst = ['bty_char_rick_10', 'bty_char_toby_01', 'bty_prop_chair_20', 'bty_prop_item_01', 'bty_prop_vase_10', 'bty_vhcl_tessla_10', 'occ_prop_vase_10', 'refl_char_rick_10', 'refl_prop_vase_10', 'shd_char_rick_10', 'shd_char_toby_01', 'shd_prop_chair_20', 'shd_prop_item_01', 'shd_prop_vase_10', 'shd_vhcl_tessla_10', 'spec_char_rick_10']

keyf = lambda text: text.split('_')[1]+'_'+text.split('_')[2]
print [list(items) for gr, items in groupby(sorted(lst), key=keyf)]

最佳答案

您需要按相同的键对列表进行排序:

[list(g) for k, g in groupby(sorted(lst, key=f), key=f)]

f 是:

f = lambda x: x.split('_')[1:]

示例:

from itertools import groupby

lst = ['bty_char_rick_10', 'bty_char_toby_01', 'bty_prop_chair_20', 'bty_prop_item_01',
'bty_prop_vase_10', 'bty_vhcl_tessla_10', 'occ_prop_vase_10', 'refl_char_rick_10',
'refl_prop_vase_10', 'shd_char_rick_10', 'shd_char_toby_01', 'shd_prop_chair_20',
'shd_prop_item_01', 'shd_prop_vase_10', 'shd_vhcl_tessla_10', 'spec_char_rick_10']

f = lambda x: x.split('_')[1:]
print([list(g) for k, g in groupby(sorted(lst, key=f), key=f)])

# [['bty_char_rick_10', 'refl_char_rick_10', 'shd_char_rick_10', 'spec_char_rick_10'],
# ['bty_char_toby_01', 'shd_char_toby_01'],
# ['bty_prop_chair_20', 'shd_prop_chair_20'],
# ['bty_prop_item_01', 'shd_prop_item_01'],
# ['bty_prop_vase_10', 'occ_prop_vase_10', 'refl_prop_vase_10', 'shd_prop_vase_10'],
# ['bty_vhcl_tessla_10', 'shd_vhcl_tessla_10']]

关于python按字符串匹配模式对列表项进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57619021/

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