[英]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.