Python-如何根据字符串的一部分从字符串列表中创建子列表?

我看到了类似的问题,但不幸的是我没有找到我的问题的答案。

我有一个清单:

list = ['a_abc', 'a_xyz', 'a_foo', 'b_abc', 'b_xyz', 'b_foo']

我想根据下划线 _ 后的字符将此列表分成 3 个。期望的输出是:

list_1 = ['a_abc', 'b_abc']
list_2 = ['a_xyz', 'b_xyz']
list_3 = ['a_foo', 'b_foo']

我想避免类似的事情:

for element in list:
   if 'abc' in element... 
   if 'xyz' in element...

因为在我的用例中,我有 200 多个字符串以这种方式进行分组。所以代码“应该识别”字符串的相同部分(下划线后)并将其分组在子列表中。

由于我没有注意到类似的问题,因此非常感谢任何建议。

回答

您不应该对一个或多个列表执行此操作,因为您在运行时不知道有多少个列表(或者,即使您知道,它也会是重复的代码)。

相反,您可以使用defaultdict; 它就像一个默认字典,但处理缺失值只需使用您指定的工厂创建一个新元素。

在这种情况下,defaultdict(list)意味着创建一个带有列表工厂的字典;当缺少一个键时,该对象将为该键创建一个空列表。

from collections import defaultdict

l = ['a_abc', 'a_xyz', 'a_foo', 'b_abc', 'b_xyz', 'b_foo']
d = defaultdict(list)
for el in l:
    key = el.split("_")[1]
    # key = el[2:]  # use this if the format of elements is <letter>_<other_chars>
    d[key].append(el)
    
print(d)
# defaultdict(<class 'list'>, {'abc': ['a_abc', 'b_abc'], 'xyz': ['a_xyz', 'b_xyz'], 'foo': ['a_foo', 'b_foo']})
print(d["abc"])
# ['a_abc', 'b_abc']


以上是Python-如何根据字符串的一部分从字符串列表中创建子列表?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>