繁体   English   中英

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

[英]Finding the same second elements in nested lists - recursive function

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

[['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”来查找所有的Antwerps) csv文件中的所有文本),所以我认为我需要一个递归函数,该函数将进行搜索直到找到由第二个项目分隔的所有嵌套列表。 如果有人有更好的解决方案,将不知道如何制作递归函数。

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

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']]}
filter(lambda x:x[1] in set(filter(lambda x:zip(*l)[1].count(x)==2,zip(*l)[1])),l)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM