Python构造一个字典数据类型?

时间:2012-06-25 05:09:10

标签: python dictionary

我是python中的新手,只是遇到了这个声明

data = dict( (k, v) for k, v in data.items() if v != 'null')

我真的不是他们在这里做什么来构建一个字典。你能解释一下吗?为什么在dict()中使用for循环以及为什么if之后呢?我在python docs中没有看到任何类似的东西。

谢谢你们

2 个答案:

答案 0 :(得分:6)

代码使用dict构造函数创建新字典。构造函数可以使用iterable个键值对来初始化新字典。正如其他人所指出的那样,示例代码有一个generator expression,它创建了这个可重复的键值对。

生成器表达式有点像列表,可以像这样重写:

mylist = []
for k, v in data.items():
    if v != 'null':
        mylist.append((k, v))

但它实际上从未创建过一个列表,它只是在dict构造函数处理它时依次产生每个值。

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

我已经链接到generator expressions in the python documentation上的部分,但是根据unkulunkulu的要求,这里还有几个:

  1. Carl's Groner的Introduction to List Comprehensions
  2. Fredrik Haard的How to (Effectively) Explain List Comprehensions

答案 1 :(得分:3)

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

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

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

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