当前位置:  开发笔记 > 编程语言 > 正文

Python Golf:将这个列表列表转换为字典的最简洁方法是什么:

如何解决《PythonGolf:将这个列表列表转换为字典的最简洁方法是什么:》经验,为你挑选了2个好方法。

我有一个列表,看起来像这样:

[['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

但我怀疑有一种更短,更优雅的方式.



1> Kiv..:

与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}



2> Markus Jarde..:
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}

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有