为了账号安全,请及时绑定邮箱和手机立即绑定

Python词典理解

Python词典理解

守着一只汪 2019-06-15 17:48:55
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但是,我得到了一个SyntaxError在for.此外(我不需要这个部分,只是想知道),您能为一组不同的值设置字典的键吗,如: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)]这也会引发SyntaxError在for.
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

确实有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中,请执行以下操作。


查看完整回答
反对 回复 2019-06-15
?
九州编程

TA贡献1785条经验 获得超4个赞

您可以使用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){}


查看完整回答
反对 回复 2019-06-15
?
catspeake

TA贡献1111条经验 获得超0个赞

>>> {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}


查看完整回答
反对 回复 2019-06-15
  • 3 回答
  • 0 关注
  • 441 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信