从列表中获取匹配的字符串并创建新列表

问题描述 投票:0回答:2

所以我的项目列表很长,我需要为所有匹配的项目创建一个新列表。这是一个简化的示例:Mylist = [猫,猫,狗,狗,熊,骆驼,骆驼,骆驼]

所以我需要说到以下几点:Catlist = [cat,cat]

Doglist = [dog,dog]

Bearlist = [bear]

Camellist = [骆驼,骆驼,骆驼]

但是诀窍是Mylist中的值将根据所调用的数据集而改变,所以我永远不确定要包含哪些内容,而只列出匹配的内容。

任何帮助将不胜感激。谢谢!

python list loops dataset slice
2个回答
0
投票
Mylist = ['cat', 'cat', 'dog', 'dog', 'bear', 'camel', 'camel', 'camel']
cats = []
dogs = []
camels = []

for item in Mylist:
    if item == 'cat':
        cats += [item]
    if item == 'dog':
        dogs += [item]
    if item == 'camel':
        camels += [item]

print(cats)
print(dogs)
print(camels)

0
投票

为每个列表使用单独的变量是不可行的-尤其是因为您事先不知道数据包含什么。您应该使用像字典这样的数据结构来使数据易于使用并将其保存在一个地方。

您可以使用itertools.groupby将您的列表变成列表字典。键将是动物,值将是动物列表。您将需要确保列表已排序,以便将相同的动物分组在一起:

from itertools import groupby

Mylist = ['cat', 'dog', 'bear', 'camel', 'camel','cat', 'camel','dog']
animals = {k:list(g) for k, g in groupby(sorted(Mylist))}

结果animals

{'bear': ['bear'],
 'camel': ['camel', 'camel', 'camel'],
 'cat': ['cat', 'cat'],
 'dog': ['dog', 'dog']}

从这里您可以通过简单地索引到字典来获得您的个人列表:

print(animals['cat']) # ['cat', 'cat']

0
投票

您也可以将这个简单的代码用于列表理解

Mylist = ["cat", "cat", "dog", "dog", "bear", "camel", "camel", "camel"]
setofthis = set(Mylist)

result = {
}
for one in setofthis:
    res = [one for i in Mylist if i == one]
    result.update({one: res})
© www.soinside.com 2019 - 2024. All rights reserved.