2

我有以下标题列表:

titles = ['Saw (US)', 'Saw (AU)', 'Dear Sally (SE)']

我将如何获得以下信息:

titles = ['Saw (US)', 'Dear Sally (SE)']

基本上,我需要删除重复的标题。显示哪个区域并不重要,只要它处于打开状态(即,我可以删除任何重复项)。

这是我尝试过的,但没有成功:

[title for title in localized_titles if title.split(' (')[0] not in localized_titles]
4

7 回答 7

1

如果这确实是您的标题的确切格式,请确保您localized_titles是正确的:

generic_titles = [t.split('(')[0] for t in titles]
titles = [title for title in titles if title.split(' (')[0] not in generic_titles]

但是,当标题中有其他括号时,这一切都会中断。

于 2013-05-14T21:48:17.070 回答
1

我不确定这是最优雅的解决方案,但它应该可以工作 - 您可以使用非领土版本的标题作为 dict 键。

unique_titles = dict((title.rsplit(' (', 1)[0], title) for title in titles)

或者,如果您需要保留顺序,可以使用 OrderedDict。

unique_titles.values() 将是包含地区的标题(每个标题一个)。

使用 rsplit 的可选参数将其限制为最多一个拆分,并使用 rsplit 从字符串末尾而不是开头开始查找括号。

于 2013-05-14T21:50:33.097 回答
0

尝试使用字典来跟踪您拥有的数组中每个项目的实例数。让字典中的键是数组中的值,字典的值是真还是假,取决于它是否已经看到该项目。

然后,您可以遍历数组,添加到字典并从数组中删除项目(如果它们存在于字典中)。我就是这样做的,但我还在学习。

于 2013-05-14T21:50:19.747 回答
0

快速,并保持秩序

seen = set()
[title for title in titles
 if title.split(' (')[0] not in seen and not seen.add(title.split(' (')[0])]
于 2013-05-14T21:50:19.803 回答
0

为了代码高尔夫:

titles = ['('.join(x) for x in dict([x.split('(') for x in titles]).items()]

假设每个标题只有一个(字符,在国家的开头。

于 2013-05-14T22:02:41.593 回答
0
>>> from collections import OrderedDict
>>> titles = ['Saw (US)', 'Saw (AU)', 'Dear Sally (SE)']
>>> list(OrderedDict((t.rpartition(' (')[0], t) for t in titles).values())
['Saw (AU)', 'Dear Sally (SE)']
于 2013-05-14T23:14:17.213 回答
0

这是到达那里的迂回方式:

localized_titles, existing_stems = [], []
for item in localized:
    stem = item.split(' (')[0]
    if stem not in existing_stems:
        existing_stems.append(stem)
        localized_titles.append(item)
于 2013-05-14T22:00:16.050 回答