繁体   English   中英

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

[英]Converting a list of list into a dictionary based on common values in python

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

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

您可以使用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)

正如其他人所说,你可以使用列表而不是字典。

以下是实现此目的的一种方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM