在Python循环中构建字典-列表和字典理解

2024-05-18 18:57:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用python玩一些循环。我很熟悉使用“for”循环:

for x in y:
    do something

也可以使用循环创建简单列表:

i = []
for x in y:
   i.append(x)

然后我最近发现了一种非常有效的循环类型,在堆栈上构建一个列表(这种循环有名字吗?我真的很想知道,这样我可以搜索得更好一点):

[x.name for x in y]

好吧,也就是说,我想进一步研究最后一种循环,我尝试使用相同类型的逻辑构建一个python字典:

{x[row.SITE_NAME] = row.LOOKUP_TABLE for row in cursor}

而不是使用:

x = {}
for row in cursor:
   x[row.SITE_NAME] = row.LOOKUP_TABLE

我在等号上收到一条错误消息,告诉我这是一个无效语法。我相信在这种情况下,它基本上告诉我等号是一个条件子句(==),而不是一个变量的声明。

我的第二个问题是,我可以使用这种类型的循环来构建一个python字典吗?还是说我太离谱了?如果是的话,我将如何构建它?


Tags: namein类型列表for字典堆栈table
3条回答

你可以这样做:

x = dict((row.SITE_NAME, row.LOOKUP_TABLE) for row in cursor)

你所使用的是所谓的列表理解。它们非常棒;)

他们有一个名为生成器表达式的表亲,它的工作方式类似于列表理解,但不是一次生成所有列表,而是一次生成一个项。因此命名生成器。你甚至可以构建生成函数-尽管有很多问题和站点可以覆盖这些信息。

你可以做两件事之一:

x = dict(((row.SITE_NAME, row.LOOKUP_TABLE) for row in cursor))

或者,如果您有一个足够新的Python版本,那么有一个叫做dictionary comprehension的东西,它的工作方式类似于list comprehension,但是会生成一个dictionary。

x = {row.SITE_NAME : row.LOOKUP_TABLE for row in cursor}

简短形式如下(称为“听写理解”(dict comprehension),类似于“列表理解”(list comprehension)、“集合理解”(set comprehension)等):

x = { row.SITE_NAME : row.LOOKUP_TABLE for row in cursor }

一般来说,给定一些_container和一个函数_value,对于给定的元素,该函数返回要添加到字典中的这个键的值:

{ _key : _value(_key) for _key in _container }

相关问题 更多 >

    热门问题