是否可以用Python创建字典理解(用于键)?

在没有列表理解的情况下,您可以使用如下内容:

l = []
for n in range(1, 11):
    l.append(n)

我们可以把它缩短为一个列表:l = [n for n in range(1, 11)].

但是,假设我想将字典的键设置为相同的值.

d = {}
for n in range(1, 11):
     d[n] = True # same value for each

我试过这个:

d = {}
d[i for i in range(1, 11)] = True

然而,我在for上得了SyntaxError分.

此外(我不需要这一部分,只是想知道),你能将字典的键设置为一系列不同的值吗,比如:

d = {}
for n in range(1, 11):
    d[n] = n

用字典理解能做到这一点吗?

d = {}
d[i for i in range(1, 11)] = [x for x in range(1, 11)]

这也提高了forSyntaxError分.

推荐答案

一共有dictionary comprehensions in Python 2.7+个,但它们并不像你所try 的那样有效.就像列表理解一样,他们创建了new字典;不能使用它们向现有词典添加关键字.此外,还必须指定键和值,当然,如果愿意,也可以指定虚拟值.

>>> d = {n: n**2 for n in range(5)}
>>> print d
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

如果要将它们全部设置为True:

>>> d = {n: True for n in range(5)}
>>> print d
{0: True, 1: True, 2: True, 3: True, 4: True}

你想要的似乎是一种在现有字典上同时设置多个键的方法.没有直接的捷径.你可以像你已经展示的那样循环,或者你可以使用字典理解来创建一个包含新值的新dict,然后执行oldDict.update(newDict)来将新值合并到旧dict中.

Python相关问答推荐

情节生成的饼图文本超出页面边界

根据多列和一些条件创建新列

定义同侪组并计算同侪组分析

customtkinter中使用的这个小部件的名称是什么

如何将新的SQL服务器功能映射到SQL Alchemy的ORM

模型序列化器中未调用现场验证器

如何使用上下文管理器创建类的实例?

将numpy数组存储在原始二进制文件中

在Python中对分层父/子列表进行排序

Pydantic 2.7.0模型接受字符串日期时间或无

从webhook中的短代码(而不是电话号码)接收Twilio消息

为什么这个带有List输入的简单numba函数这么慢

如果值发生变化,则列上的极性累积和

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

如何在图中标记平均点?

如何合并两个列表,并获得每个索引值最高的列表名称?

在方法中设置属性值时,如何处理语句不可达[Unreacable]";的问题?

如何找出Pandas 图中的连续空值(NaN)?

为什么调用函数的值和次数不同,递归在代码中是如何工作的?

Beautifulsoup:遍历一个列表,从a到z,并解析数据,以便将其存储在pdf中.