基于大数组的第一个元素创建子数组形成一个大数组

时间:2014-11-22 21:02:05

标签: python list

我有一个数组,

list =  [['a', '2', '7'], ['b', '2', '9'],['a', '1', '4'],['c', '6', '1'],['b', '9', '9'],['a', '3', '2'],['c', '1', '5'],['b', '3', '7']]

我可以写:

aList =  [[row [1], row [2]] for row in list if row [0] == "a"] 
bList =  [[row [1], row [2]] for row in list if row [0] == "b"]
cList =  [[row [1], row [2]] for row in list if row [0] == "c"]

制作具有特定第一元素的第二和第三元素的子阵列,即'a','b'或'c'。 但我想知道编写一个代码的方法是什么,它将为所有第一个元素完成工作。

3 个答案:

答案 0 :(得分:2)

使用字典将第一个项目作为键,其余项目作为值。 collections.defaultdict会让您更轻松地完成此任务,您也可以使用普通dict执行此操作:

>>> from collections import defaultdict
>>> lst = [['a', '2', '7'], ['b', '2', '9'],['a', '1', '4'],['c', '6', '1'],['b', '9', '9'],['a', '3', '2'],['c', '1', '5'],['b', '3', '7']]
>>> d = defaultdict(list)
>>> for x in lst:
        d[x[0]].append(x[1:])
        #For plain dict this is going to be:
        #d.setdefault(x[0], []).append(x[1:]) 

>>> d['a']
[['2', '7'], ['1', '4'], ['3', '2']]
>>> d['b']
[['2', '9'], ['9', '9'], ['3', '7']]
>>> d['c']
[['6', '1'], ['1', '5']]

答案 1 :(得分:1)

import operator

L = [['a', '2', '7'], ['b', '2', '9'],['a', '1', '4'],['c', '6', '1'],['b', '9', '9'],['a', '3', '2'],['c', '1', '5'],['b', '3', '7']]

lists = {'a':[], 'b':[], 'c':[]}
g = operator.itemgetter(1,2)
for t in L:
    lists[t[0]].append(g(t))

print('aList:', lists['a'])
print('bList:', lists['b'])
print('cList:', lists['c'])

输出:

aList: [('2', '7'), ('1', '4'), ('3', '2')]
bList: [('2', '9'), ('9', '9'), ('3', '7')]
cList: [('6', '1'), ('1', '5')]

答案 2 :(得分:0)

词典可以为你做这项工作。

dict_list = {}
for row in list:
    dict_list.setdefault(row[0],[])
    dict_list[row[0]].append(row[1:])
如果密钥不存在,

setdefault会将值设置为空列表[]。 输出:

>>>dict_list
{'a': [['2', '7'], ['1', '4'], ['3', '2']], 
'c': [['6', '1'], ['1', '5']], 
'b': [['2', '9'], ['9', '9'], ['3', '7']]}