Python词典理解

Python词典理解

是否可以用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

但是,我得到了一个SyntaxErrorfor.

此外(我不需要这个部分,只是想知道),您能为一组不同的值设置字典的键吗,如:

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

这也会引发SyntaxErrorfor.


守着一只汪
浏览 442回答 3
3回答

一只萌萌小番薯

确实有Python 2.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.update(newDict)若要将新值合并到旧的DIT中,请执行以下操作。

九州编程

您可以使用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)}您可能不应该这样做,但是您也可以创建一个dict它的工作方式有点像defaultdict如果你覆盖__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){}

catspeake

>>> {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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python