我是python的新手,我需要一些指导。迭代下面列表的最佳方法是什么。
[('admincases', 'test_case_6'), ('admincases', 'test_case_8'),('admincases1', 'test_case_8'),('admincases1', 'test_case_9'),('admincases1', 'test_case_10')]
首先,我希望获得所有管理员的独特价值,如:
['admincases', 'admincases1']
然后迭代上述情况我应该得到指定案例的测试列表:
'admincase'
['test_case_6', 'test_case_8']
'admincase1'
['test_case_8', 'test_case_9', 'test_case_10']
答案 0 :(得分:3)
>>> 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']
答案 1 :(得分:2)
>>> itertools.groupby(L, key=operator.itemgetter(0))
<itertools.groupby object at 0x7fb79740aa48>
>>> list(itertools.groupby(L, key=operator.itemgetter(0)))
[('admincases', <itertools._grouper object at 0x7fb797405a10>), ('admincases1', <itertools._grouper object at 0x7fb797405a50>)]
>>> [(x[0], list(x[1])) for x in itertools.groupby(L, key=operator.itemgetter(0))]
[('admincases', [('admincases', 'test_case_6'), ('admincases', 'test_case_8')]), ('admincases1', [('admincases1', 'test_case_8'), ('admincases1', 'test_case_9'), ('admincases1', 'test_case_10')])]
请确保您的输入首先按键排序。
答案 2 :(得分:1)
>>> lis= [('admincases', 'test_case_6'), ('admincases', 'test_case_8'),('admincases1', 'test_case_8'),('admincases1', 'test_case_9'),('admincases1', 'test_case_10')]
>>> lis1=list({x[0] for x in lis}) #returns ['admincases', 'admincases1']
>>> dic={y:[x[1] for x in lis if x[0]==y]for y in lis1}
>>> dic
{'admincases': ['test_case_6', 'test_case_8'], 'admincases1': ['test_case_8', 'test_case_9', 'test_case_10']}
答案 3 :(得分:0)
以下是使用dict.setdefault
代替defaultdict
的@ BurhanKhalid解决方案的另一种方法。我更喜欢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']