我有一个列表,看起来像这样:
[['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
但我怀疑有一种更短,更优雅的方式.
与MizardX相同的想法,但在使用dict理解的 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}
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}