如何在两个字符串列表中合并重复项?

时间:2017-02-19 17:46:34

标签: python python-2.7 list dictionary duplicates

我对python(2.7)有点新意,我很难做到这一点。

我有以下列表:

animal = ['cat', 'cat', 'dog', 'dog', 'dog', 'horse']
names = ['cat_01', 'cat_02', 'dog_01', 'dog_02', 'dog_03', 'horse_01']

我希望得到以下内容(可能是元组或字典的列表)

new = {"cat":('cat_01','cat_02'), "dog":('dog_01','dog_02', 'dog_03'), "horse":('horse_01')}

如何做到最好?

3 个答案:

答案 0 :(得分:1)

使用列表理解的简短解决方案:

animal = ['cat', 'cat', 'dog', 'dog', 'dog', 'horse']
names = ['cat_01', 'cat_02', 'dog_01', 'dog_02', 'dog_03', 'horse_01']
result = {a:tuple([n for n in names if a in n]) for a in animal}

print result

输出:

{'cat': ('cat_01', 'cat_02'), 'horse': ('horse_01',), 'dog': ('dog_01', 'dog_02', 'dog_03')}

答案 1 :(得分:1)

您还可以使用groupby

中的itertools
from itertools import groupby
my_dict = {}
for key, groups in groupby(zip(animal, names), lambda x: x[0]):
    my_dict[key] = tuple(g[1] for g in groups)

当您的列表增长时,这可能会快一点。

答案 2 :(得分:0)

假设您的列表按照示例中的顺序排序:

<强>代码:

android.provider.Browser.getAllBookmarks()

<强>给出:

my_dict = {}
for animal, name in zip(animals, names):
    my_dict.setdefault(animal, []).append(name)
print(my_dict)

如果你需要元组而不是列表:

{'horse': ['horse_01'], 'dog': ['dog_01', 'dog_02', 'dog_03'], 'cat': ['cat_01', 'cat_02']}