ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如何用正确的顺序在Python中构造嵌套字典理解?

2019-07-15 12:57:54  阅读:161  来源: 互联网

标签:python dictionary nested dictionary-comprehension


当我遇到问题时,我试图缩短this problem的代码.

基本上,我正在尝试嵌套词典理解&这次尝试没有成功.
这是我试过的.

dict2 = {key:value for key, value in line.split(":")
                   for line in ["1:One", "2:Two", "4:Four"]}
print dict2

当我运行它时,它给了我

NameError: name 'line' is not defined

而且,当我颠倒像这样的for语句时

dict2 = {key:value for line in ["1:One", "2:Two", "4:Four"]
                   for key, value in line.split(":")}
print dict2

它导致了

ValueError: need more than 1 value to unpack

我需要有关字典(或列表)理解的嵌套结构的帮助.一个例子可以帮助很多.

解决方法:

请注意,有一种更好的方法可以在没有词典理解的情况下做到这一点;见下文.我将首先解决您的方法的问题.

您需要在理解中使用嵌套顺序.按嵌套常规循环时的顺序列出循环.

line.split()表达式返回两个项目的序列,但这些项目中的每一个都不是键和值的元组;相反,只有一个元素被迭代.将分组包装在一个元组中,这样就可以得到一个(序列)的(键,值)项目,将两个结果分配给两个项目:

dict2 = {key:value for line in ["1:One", "2:Two", "4:Four"]
                   for key, value in (line.split(":"),)}

这相当于:

dict2 = {}
for line in ["1:One", "2:Two", "4:Four"]:
    for key, value in (line.split(":"),):
        dict2[key] = value

只需要嵌套循环,因为你不能这样做:

dict2 = {}
for line in ["1:One", "2:Two", "4:Four"]:
    key, value = line.split(":")
    dict2[key] = value

但是,在这种情况下,您应该使用dict()构造函数,而不是字典理解.它需要两个元素的序列,简化了整个操作:

dict2 = dict(line.split(":") for line in ["1:One", "2:Two", "4:Four"])

标签:python,dictionary,nested,dictionary-comprehension
来源: https://codeday.me/bug/20190715/1467665.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有