繁体   English   中英

Python-从列表中识别重复子列表项的列表项

[英]Python - identify items from list where sublist items are duplicated

标题糟糕,请根据需要重命名或概括。

场景:

inputList = [[1, "Data x"], [2, "Data z"], [3, "Data x"]]

我想找到索引[1]的重复项。

DesiredOutput = [[1, "Data x"], [3, "Data x"]]

理想情况下,[1]应该是另一个列表,而不是字符串:

[[1, ["Data x1", "Data x2"], [2,  ["Data x1", "Data x2"]]

怎么样(只是一种选择)

inputList = [[1, "Data x"], [2, "Data z"], [3, "Data x"]]

from operator import itemgetter
from collections import defaultdict

dd = defaultdict(list)
for i, v in enumerate(inputList):
    dd[v[1]].append(i)

dupes = [itemgetter(*v)(inputList) for v in dd.itervalues() if len(v) > 1]
# [([1, 'Data x'], [3, 'Data x'])]

在此处使用字典:

>>> inputList = [[1, "Data x"], [2, "Data z"], [3, "Data x"]]
>>> from collections import defaultdict
>>> dic = defaultdict(list)
>>> for v, k in inputList:
...     dic[k].append(v)
...     
>>> dic
defaultdict(<type 'list'>, {'Data z': [2], 'Data x': [1, 3]})

由于第二个示例中的项目是列表,因此您需要先将它们转换为元组:

for v, k in inputList:
   dic[tuple(k)].append(v)
inputList = [[1, "Data x"], [2, "Data z"], [3, "Data x"]]

DesiredOutput = [] # Create empty list

for x in inputList:  
    if x[1] == inputList[0][1]: #compare reference value with each item in inputList 
        DesiredOutput.append(x)  
print(DesiredOutput)

#[[1, "Data x"], [3, "Data x"]]
input_list = [[1, "Data x"], [2, "Data z"], [3, "Data x"]]
desired_output = [x for x in input_list if x[1] == input_list[0][1]]
print(desired_output)

暂无
暂无

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

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