当前位置: 首页 > 知识库问答 >
问题:

Python词典理解

施旭东
2023-03-14

是否有可能在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

但是,我在的上得到了一个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)]

这还会在上引发一个语法错误。


共有3个答案

戚俊美
2023-03-14
>>> {i:i for i in range(1, 11)}
{1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10}
韦繁
2023-03-14

您可以使用dict.fromkeys类方法。。。

>>> dict.fromkeys(range(5), True)
{0: True, 1: True, 2: True, 3: True, 4: True}

这是创建所有键映射到相同值的字典的最快方法。

但不要将其用于可变对象:

d = dict.fromkeys(range(5), [])
# {0: [], 1: [], 2: [], 3: [], 4: []}
d[1].append(2)
# {0: [2], 1: [2], 2: [2], 3: [2], 4: [2]} !!!

如果您实际上不需要初始化所有键,那么defaultdict也可能很有用:

from collections import defaultdict
d = defaultdict(True)

要回答第二部分,你需要的是一个判断理解:

{k: k for k in range(10)}

您可能不应该这样做,但您也可以创建一个子类的代码,它的工作原理有点像默认代码,如果您重写代码__missing__代码:

>>> class KeyDict(dict):
...    def __missing__(self, key):
...       #self[key] = key  # Maybe add this also?
...       return key
... 
>>> d = KeyDict()
>>> d[1]
1
>>> d[2]
2
>>> d[3]
3
>>> print(d)
{}
於宏大
2023-03-14

Python2.7中有字典理解,但它们的工作方式与您尝试的方式不太一样。就像列表理解一样,他们创建了一个新的词典;不能使用它们向现有词典添加关键字。此外,还必须指定键和值,当然,如果愿意,也可以指定虚拟值。

>>> 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。更新(newDict)将新值合并到旧dict中。

 类似资料:
  • 问题内容: 我需要合并多个词典,例如: 随着A B C和D作为树的叶子像 词典的级别(深度)未知,可能是 在我的情况下,它代表目录/文件结构,其中节点为docs,而节点为文件。 我想将它们合并以获得: 我不确定如何使用Python轻松做到这一点。 问题答案: 这实际上是非常棘手的-特别是如果你希望在事物不一致时收到有用的错误消息,同时正确地接受重复但一致的条目(这里没有其他答案了……)。 假设你没

  • 问题内容: 如何创建具有这种理解力的字典? 问题答案: dict理解具有 自己的名称空间 ,而在该名称空间中没有。从技术上讲,除最外层可迭代对象(此处)之外的所有其他内容,几乎都是作为嵌套函数运行的,最外层可迭代对象作为参数传递。 如果您改用了代码,或者在dict理解 之外 创建了对字典的引用,那么您的代码将起作用: __ 演示:

  • 基础教程介绍了基本概念,特别是对象和类。 进阶教程对基础教程的进一步拓展,说明Python的细节。希望在进阶教程之后,你对Python有一个更全面的认识。 之前我们说了,列表是Python里的一个类。一个特定的表,比如说nl = [1,3,8],就是这个类的一个对象。我们可以调用这个对象的一些方法,比如 nl.append(15)。 我们要介绍一个新的类,词典 (dictionary)。与列表相似

  • 问题内容: 给定一个像这样的字典: 如何创建一个字典列表,该列表结合了第一个字典键的各种值?我想要的是: 问题答案: 我认为您想要笛卡尔积,而不是排列,在这种情况下可以提供帮助:

  • 本文向大家介绍Python字典理解,包括了Python字典理解的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将学习如何在Python中使用字典理解。如果您已经熟悉列表理解,那么学习字典理解就不会花费很多时间。 我们需要键:值对来创建字典。如何使用字典理解来获取这些键值对?请参阅字典理解的一般说明。 我们需要填写以上语句来完成字典理解。有很多方法可以填充它。让我们看看一些最常见的方法。

  • 上面的脚本抛出错误:“ValueError:如果使用所有标量值,则必须传递索引” 我需要字典键作为数据帧列 下面的脚本可以很好地作为字典值添加为列表 请让我知道如何实现这一点?