Извлекать частичные дубликаты из списка списков; возвращать одно совпадение с записью происхождения каждого дубликата; питон
У меня есть список в следующем формате:
L = ['apples oranges x',
'bananas apples y',
'apples oranges z']
Для каждого элемента в L, если item.split()[0:2] соответствует другому item.split()[0:2] (т. Е. "Яблочные апельсины" соответствуют "яблочным апельсинам"), тогда мне нужно вывести один элемент.split () [0: 2], за которым следуют теги, записывающие начало частично дублированной строки. Теги поступают из индекса 3 каждого элемента (т. Е. X, y или z).
Итак, вывод L будет L2:
L2 = ['apples oranges x z',
'bananas apples y']
Есть идеи?
1 ответ
Решение
d = collections.defaultdict(list)
for line in L:
name, value = line.rsplit(' ',1)
d[name].append(value)
тогда у вас будет такой голос:
{'bananas apples ': ['y'], 'apples oranges ': ['x', 'z']}
Так что вам нужно только отформатировать ключи и значения:
[key + ' '.join(values) for key, values in d.items()]
И результат будет:
['bananas apples y', 'apples oranges x z']