我在python中有一个列表列表如下:
a = [['John', 24, 'teacher'],['Mary',23,'clerk'],['Vinny', 21, 'teacher'], ['Laura',32, 'clerk']]
这个想法是根据他们的职业创建一个字典如下:
b = {'teacher': {'John_24': 'true', 'Vinny_21' 'true'},
'clerk' : {'Mary_23': 'true', 'Laura_32' 'true'}}
实现这一目标的最佳方式是什么?
答案 0 :(得分:2)
您可以使用defaultdict:
a = [['John', 24, 'teacher'],['Mary',23,'clerk'],['Vinny', 21, 'teacher'], ['Laura',32, 'clerk']]
from collections import defaultdict
dct = defaultdict(defaultdict)
for name, age, occ in a:
dct[occ][name + "_" + age] = "true"
输出:
from pprint import pprint as pp
pp(dict(dct))
{'clerk': defaultdict(None, {'Laura_32': 'true', 'Mary_23': 'true'}),
'teacher': defaultdict(None, {'John_24': 'true', 'Vinny_21': 'true'})}
虽然您可能只是将每个名字附加到列表中:
from collections import defaultdict
dct = defaultdict(list)
for name, _, occ in a:
dct[occ].append(name + "_" + age)
哪个会给你:
defaultdict(<class 'list'>, {'clerk': ['Mary_23', 'Laura_32'], 'teacher': ['John_24', 'Vinny_21']})
如果您想稍后使用年龄,您也可以单独存储它们:
from collections import defaultdict
dct = defaultdict(list)
for name, age, occ in a:
dct[occ].append([name, age])
哪会给你:
defaultdict(<class 'list'>,
{'clerk': [['Mary', 23], ['Laura', 32]],
'teacher': [['John', 24], ['Vinny', 21]]})
使用python3可以使用:
for *nm_age, occ in a:
dct[occ].append(nm_age)
答案 1 :(得分:1)
正如其他人所说,你可以使用列表而不是字典。
以下是实现此目的的一种方法:
a = [
['John', 24, 'teacher'],
['Mary', 23, 'clerk'],
['Vinny', 21, 'teacher'],
['Laura', 32, 'clerk'],
]
b = {}
for name, age, occupation in a:
b.setdefault(occupation, []).append('{}_{}'.format(name, age))
print b # {'clerk': ['Mary_23', 'Laura_32'], 'teacher': ['John_24', 'Vinny_21']}