我有嵌套列表,如下所示;
[['CELTIC AMBASSASDOR', 'Warrenpoint'],['HAV SNAPPER', 'Silloth'],['BONAY', 'Antwerp'],['NINA', 'Antwerp'],['FRI SKIEN', 'Warrenpoint']]
继续。如何找到具有相同第二个元素的列表,例如
['CELTIC AMBASSASDOR', 'Warrenpoint']
['FRI SKIEN', 'Warrenpoint']
['BONAY', 'Antwerp']
['NINA', 'Antwerp']
列表太长了(我正在从.csv文件中读取它)而我无法确定要搜索哪个东西(例如:我不能搜索'安特卫普'找到所有安特卫普因为我不喜欢我不知道csv文件中的所有文本,所以我认为我需要一个递归函数来搜索,直到找到所有嵌套列表被第二项分隔。无法弄清楚如何制作递归函数,如果有人有更好的解决方案,非常感谢。
答案 0 :(得分:2)
这里不需要使用递归。使用第二个元素的键和整个子列表的值创建一个字典,然后创建一个仅包含您感兴趣的匹配项的结果:
import collections
l = [['CELTIC AMBASSASDOR', 'Warrenpoint'],['HAV SNAPPER', 'Silloth'],['BONAY', 'Antwerp'],['NINA', 'Antwerp'],['FRI SKIEN', 'Warrenpoint']]
d = collections.defaultdict(list)
for item in l:
d[item[1]].append(item)
result = dict(item for item in d.items() if len(d[item[0]]) > 1)
结果:
>>> import pprint
>>> pprint.pprint(result)
{'Antwerp': [['BONAY', 'Antwerp'], ['NINA', 'Antwerp']],
'Warrenpoint': [['CELTIC AMBASSASDOR', 'Warrenpoint'],
['FRI SKIEN', 'Warrenpoint']]}
答案 1 :(得分:0)
filter(lambda x:x[1] in set(filter(lambda x:zip(*l)[1].count(x)==2,zip(*l)[1])),l)