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))

但它从未真正创建一个列表,它只是在字典构造函数处理时依次生成每个值。

至于为什么if在循环之后出现,这是python开发人员选择的语法,所以你必须问他们。但是请注意,在我重写的生成器表达式中,if语句位于 for 语句内部(即之后)。

我已经链接到 python 文档中关于生成器表达式的部分,但应 unkulunkulu 的要求,这里还有几个:

  1. 卡尔的格罗纳对列表理解的介绍
  2. Fredrik Haard's How to (Effective) Explain List Compenhensions
dict()

参数是一个生成器表达式,它产生由从data.items()中提取的键、值对(即(k, v))组成的元组。dict()内置函数可以从此类元组的列表或序列中自动构造字典对象,例如:

>>> kvs = [('a', 1), ('b', 2)]
>>> dict(kvs)
{'a': 1, 'b': 2}

if v != 'null' 限定符指示生成器忽略/跳过那些值(即元组中的第二项)等于 'null' 的元素(更准确地说,它只生成那些值不等于 'null' 的对)。

有关生成器表达式的更详细说明,请参阅 PEP 289。

最新更新