我有一个数组,
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'。 但我想知道编写一个代码的方法是什么,它将为所有第一个元素完成工作。
答案 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']]}