基于python中的常见值将列表列表转换为字典

时间:2016-08-11 15:32:52

标签: python list dictionary

我在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'}}

实现这一目标的最佳方式是什么?

2 个答案:

答案 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']}