我有一个列表如下:
[['Tom', 'Dick'], ['Harry', 'John', 'Mike'], ['Bob']]
我希望把它变成一个字典,其中每个键都是一个名称,每个值都是一个与列表中子列表位置相对应的数字:
{'Tom': 0, 'Dick': 0, 'Harry': 1, 'John': 1, 'Mike': 1, 'Bob': 2}
我尝试了各种列表推导,但我无法使用嵌套列表。我可以使用嵌套循环,如下所示:
names = [['Tom', 'Dick'], ['Harry', 'John', 'Mike'], ['Bob']]
names_dict = {}
for i, name_sublist in enumerate(names):
for name in name_sublist:
names_dict[name] = i
但我怀疑有一种更短,更优雅的方式。
答案 0 :(得分:19)
与MizardX相同,但使用dict comprehensions:
在Python 3.0中略小且漂亮>>> names = [['Tom', 'Dick'], ['Harry', 'John', 'Mike'], ['Bob']]
>>> names_dict = {name:index for index, lst in enumerate(names) for name in lst}
>>> names_dict
{'Tom': 0, 'Mike': 1, 'Dick': 0, 'Harry': 1, 'Bob': 2, 'John': 1}
答案 1 :(得分:14)
names_dict = dict((name,index)
for index,lst in enumerate(names)
for name in lst)
示例:
>>> names = [['Tom', 'Dick'], ['Harry', 'John', 'Mike'], ['Bob']]
>>> names_dict = dict((name,index)
... for index,lst in enumerate(names)
... for name in lst)
>>> names_dict
{'Tom': 0, 'Mike': 1, 'Dick': 0, 'Harry': 1, 'Bob': 2, 'John': 1}
答案 2 :(得分:1)
python 2.6
dict([(t,l.index(x)) for x in l for t in x])
python3.0
{t:l.index(x) for x in l for t in x}
如果l是名称列表