我有以下标题列表:
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]
答案 0 :(得分: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]
但是,当标题中有其他括号时,所有中断。
答案 1 :(得分:1)
我不确定这是最优雅的解决方案,但它应该可行 - 您可以使用非地域版本的标题作为字典键。
unique_titles = dict((title.rsplit(' (', 1)[0], title) for title in titles)
或者,如果您需要保留订单,则为OrderedDict。
unique_titles.values()将是包含地区的标题(每个标题一个)。
使用rsplit的可选参数将其限制为最多一次拆分,并且rsplit开始从结束而不是字符串的开头查找parens。
答案 2 :(得分:0)
尝试使用字典来跟踪阵列中每个项目的实例数。让字典中的键是数组中的值,字典的值是真还是假,取决于它是否已经看到该项。
然后,您可以遍历数组,添加到字典中并从数组中删除项目(如果它们存在于字典中)。我就是这样做的,但我还在学习。
答案 3 :(得分:0)
快,并保留订单
seen = set()
[title for title in titles
if title.split(' (')[0] not in seen and not seen.add(title.split(' (')[0])]
答案 4 :(得分: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)
答案 5 :(得分:0)
为了代码高尔夫:
titles = ['('.join(x) for x in dict([x.split('(') for x in titles]).items()]
在国家/地区的开头,每个标题只假设一个(
个字符。
答案 6 :(得分: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)']