如何在python列表中实现数据搜索

如何在python列表中实现数据搜索,python,python-2.7,Python,Python 2.7,我是python的新手,需要一些指导。在下面的列表中迭代的最佳方式是什么 [('admincases', 'test_case_6'), ('admincases', 'test_case_8'),('admincases1', 'test_case_8'),('admincases1', 'test_case_9'),('admincases1', 'test_case_10')] 首先,我想获得所有admincases的唯一值,如: ['admincases', 'admincases1'

我是python的新手,需要一些指导。在下面的列表中迭代的最佳方式是什么

[('admincases', 'test_case_6'), ('admincases', 'test_case_8'),('admincases1', 'test_case_8'),('admincases1', 'test_case_9'),('admincases1', 'test_case_10')]
首先,我想获得所有admincases的唯一值,如:

['admincases', 'admincases1']
然后迭代上述案例,我应该得到指定案例的测试列表:

'admincase'
  ['test_case_6', 'test_case_8']
'admincase1'
  ['test_case_8', 'test_case_9', 'test_case_10']
itertools.groupby(L,key=operator.itemgetter(0)) >>>列表(itertools.groupby(L,key=operator.itemgetter(0))) [('admincases',),('admincases1',)] >>>itertools.groupby(L,key=operator.itemgetter(0))中x的[(x[0],列表(x[1])] [('admincases',[('admincases','test_case_6'),('admincases','test_case_8')),('admincases1',[('admincases1','test_case_8'),('admincases1','test_case_9'),('admincases1','test_case_10'))] 但是,请确保您的输入首先按键排序。

>itertools.groupby(L,key=operator.itemgetter(0))
>>>列表(itertools.groupby(L,key=operator.itemgetter(0)))
[('admincases',),('admincases1',)]
>>>itertools.groupby(L,key=operator.itemgetter(0))中x的[(x[0],列表(x[1])]
[('admincases',[('admincases','test_case_6'),('admincases','test_case_8')),('admincases1',[('admincases1','test_case_8'),('admincases1','test_case_9'),('admincases1','test_case_10'))]
但是,请确保您的输入首先按键排序。

使用

使用


下面是@BurhanKhalid使用
dict.setdefault
而不是
defaultdict
解决方案的另一种方法。我更喜欢
defaultdict
,但是如果默认值不需要花费很长时间来构造,显然这会更快

>>> L = [('admincases', 'test_case_6'), ('admincases', 'test_case_8'),('admincases1', 'test_case_8'),('admincases1', 'test_case_9'),('admincases1', 'test_case_10')]
>>> D = {}
>>> for k,v in L:
        D.setdefault(k,[]).append(v)


>>> D['admincases']
['test_case_6', 'test_case_8']

下面是@BurhanKhalid使用
dict.setdefault
而不是
defaultdict
解决方案的另一种方法。我更喜欢
defaultdict
,但是如果默认值不需要花费很长时间来构造,显然这会更快

>>> L = [('admincases', 'test_case_6'), ('admincases', 'test_case_8'),('admincases1', 'test_case_8'),('admincases1', 'test_case_9'),('admincases1', 'test_case_10')]
>>> D = {}
>>> for k,v in L:
        D.setdefault(k,[]).append(v)


>>> D['admincases']
['test_case_6', 'test_case_8']
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> l = [('admincases', 'test_case_6'), ('admincases', 'test_case_8'),('admincases1', 'test_case_8'),('admincases1', 'test_case_9'),('admincases1', 'test_case_10')]
>>> for k,v in l:
...    d[k].append(v)
... 
>>> d['admincases']
['test_case_6', 'test_case_8']
>>> L = [('admincases', 'test_case_6'), ('admincases', 'test_case_8'),('admincases1', 'test_case_8'),('admincases1', 'test_case_9'),('admincases1', 'test_case_10')]
>>> D = {}
>>> for k,v in L:
        D.setdefault(k,[]).append(v)


>>> D['admincases']
['test_case_6', 'test_case_8']