簡體   English   中英

在python中搜索嵌套列表

[英]searching through a nested-list in python

我有一個97510個值的元組的嵌套列表,如下所示:

a = [ (1,2,3), (3,4,5), (5,4,2)]

每個第一個值(index = 0)是唯一的,我需要找到其他index = 0項,它們具有相同的index = 1項。在示例中,我需要找到第二個和第三個元組,其中第二個項“ 4”是普通的。

我該怎么做 ?

如果要查找所有匹配項:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for inner in a:
...     d[inner[1]].append(inner)
... 
>>> d
defaultdict(<type 'list'>, {2: [(1, 2, 3)], 4: [(3, 4, 5), (5, 4, 2)]})
>>> d[4]
[(3, 4, 5), (5, 4, 2)]

如果要選擇特定第二個值的所有匹配項,請執行以下操作:

 
 
 
  
  >>> filter(lambda inner: inner[1] == 4, a) [(3, 4, 5), (5, 4, 2)]
 
  

編輯 :正如評論中指出的那樣,列表理解是可取的,因為它對於這樣的工作更有效:

>>> [inner for inner in a if inner[1] == 4]
[(3, 4, 5), (5, 4, 2)]

使用timeit顯示列表理解速度大約快2.5倍(無論如何在我的機器上):

>>> timeit.timeit('[inner for inner in a if inner[1] == 4]', 'a=[(1,2,3), (3,4,5), (5, 4, 2)]')
2.5041549205780029
>>> timeit.timeit('filter(lambda inner: inner[1] == 4, a)', 'a=[(1,2,3), (3,4,5), (5, 4, 2)]')
6.328679084777832

這是一種實現方法:

>>> result = defaultdict(list)
>>> for item in a:
>>>     result[item[1]].append(item)
>>> result
defaultdict(<type 'list'>, {2: [(1, 2, 3)], 4: [(3, 4, 5), (5, 4, 2)]})

這將導致一個列表字典,其中所有具有相同第二個值的所有項目都在一個列表中,並且該值作為鍵。

請注意,您還可以使用groupby

from itertools import groupby

data = [ (1,2,3), (3,4,5), (5,4,2)]
res = groupby(sorted(data), key=lambda x: x[1])

根據評論編輯

解決該問題並找到另一種解決方案-但是不是最佳解決方案,但是:

inputVals = [(1,2,3), (3,4,5), (5,4,2), (2,2,3), (7,3,1)]
for val in set(x[1] for x in inputVals):   
    print val, list(set(sval for sval in inputVals if sval[1] == val))

另一種選擇:

from operator import itemgetter
from itertools import groupby

a = [ (1,2,3), (3,4,5), (5,4,2)]
b = groupby(sorted(a), itemgetter(1))
for val, group in b:
    print val, list(group)
# 2 [(1, 2, 3)]
# 4 [(3, 4, 5), (5, 4, 2)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM