我是 python 新手,刚刚遇到了这个语句
data = dict( (k, v) for k, v in data.items() if v != 'null')
我真的不知道他们在这里做什么来构建一个字典。你能给我解释一下吗?为什么在 dict() 中使用 for 循环以及为什么 if 紧随其后?我在 python 文档中没有看到这样的东西。
多谢你们
我是 python 新手,刚刚遇到了这个语句
data = dict( (k, v) for k, v in data.items() if v != 'null')
我真的不知道他们在这里做什么来构建一个字典。你能给我解释一下吗?为什么在 dict() 中使用 for 循环以及为什么 if 紧随其后?我在 python 文档中没有看到这样的东西。
多谢你们
该代码使用dict
构造函数来创建一个新字典。构造函数可以采用可迭代的键值对来初始化新字典。正如其他人指出的那样,示例代码有一个生成器表达式,用于创建这个可迭代的键值对。
生成器表达式有点像列表,可以这样重写:
mylist = []
for k, v in data.items():
if v != 'null':
mylist.append((k, v))
但它从来没有真正创建一个列表,它只是在 dict 构造函数处理它时依次产生每个值。
至于为什么在if
循环之后出现,这是python开发人员选择的语法,所以你必须问他们。但请注意,在我重写的生成器表达式中,该if
语句位于 for 语句内部(即之后)。
我已经链接到python 文档中关于生成器表达式的部分,但应 unkulunkulu 的要求,这里还有一些:
to 的参数dict()
是一个生成器表达式,它产生由从 中提取的键、值对(即(k, v)
)组成的元组data.items()
。dict()
内置函数可以从此类元组的列表或序列中自动构造字典对象,例如:
>>> kvs = [('a', 1), ('b', 2)]
>>> dict(kvs)
{'a': 1, 'b': 2}
if v != 'null'
限定符指示生成器忽略/跳过值(即元组中的第二项)等于的那些元素('null'
更准确地说,它只产生值不等于的那些对'null'
)。
有关生成器表达式的更详细说明,请参阅PEP 289。