在嵌套列表递归函数中查找相同的第二个元素

2024-06-16 12:45:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有嵌套列表,看起来像这样

[['CELTIC AMBASSASDOR', 'Warrenpoint'],['HAV SNAPPER', 'Silloth'],['BONAY', 'Antwerp'],['NINA', 'Antwerp'],['FRI SKIEN', 'Warrenpoint']]

然后继续。例如,如何找到具有相同第二个元素的列表

['CELTIC AMBASSASDOR', 'Warrenpoint']
['FRI SKIEN', 'Warrenpoint']

['BONAY', 'Antwerp']
['NINA', 'Antwerp']

列表太长(我是从一个.csv文件中读取的),我无法确定到底要搜索哪一个(例如:我无法搜索“Antwerp”来查找所有的Antwerp,因为我不知道csv文件中的所有文本),所以我想我需要一个递归函数来搜索,直到找到由第二项分隔的所有嵌套列表。不知道怎么做递归函数,如果有人有更好的解决方案,非常感谢


Tags: 文件csv元素列表frininasnapperantwerp
2条回答
filter(lambda x:x[1] in set(filter(lambda x:zip(*l)[1].count(x)==2,zip(*l)[1])),l)

这里不需要使用递归。使用第二个元素的键和整个子列表的值创建一个字典,然后创建一个只包含您感兴趣的匹配项的结果:

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']]}

相关问题 更多 >