首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >插入到python字典中

插入到python字典中
EN

Stack Overflow用户
提问于 2011-06-23 23:35:09
回答 4查看 65.4K关注 0票数 21

python字典的默认行为是在字典中创建一个新键(如果该键不存在)。例如:

代码语言:javascript
复制
d = {}
d['did not exist before'] = 'now it does'

这在大多数情况下都很好,但是如果字典中没有键,我希望python什么也不做,那该怎么办呢?在我的情况下:

代码语言:javascript
复制
for x in exceptions:
    if masterlist.has_key(x):
        masterlist[x] = False

换句话说,我不希望异常中的一些不正确的元素破坏我的主列表。这就像它得到的那样简单吗?我感觉我应该能够在for循环中的一行代码中做到这一点(即,不需要显式检查x是masterlist的键)

更新:对我来说,我的问题是关于列表和字典之间缺乏可比性。例如:

代码语言:javascript
复制
l = []
l[0] = 2 #fails
l.append(2) #works

有了子类化的答案,您可以修改字典(可能是"safe_dict“或"explicit_dict”,以执行类似的操作:

代码语言:javascript
复制
d = {}
d['a'] = '1' #would fail in my world
d.insert('a','1') #what my world is missing
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-23 23:41:39

你可以继承一个dict类,重写它的__setitem__来检查key是否存在(或者对只修补一个实例做同样的事情)。

示例类:

代码语言:javascript
复制
class a(dict):
    def __init__(self, *args, **kwargs):
        dict.__init__(self, *args, **kwargs)
        dict.__setitem__(self, 'a', 'b')

    def __setitem__(self, key, value):
        if self.has_key(key):
          dict.__setitem__(self, key, value)

a = a()
print a['a'] # prints 'b'
a['c'] = 'd'
# print a['c'] - would fail
a['a'] = 'e'
print a['a'] # prints 'e'

您还可以使用一些函数来简化设置值,而无需检查是否存在。

然而,我认为它会更短...除非你在很多地方需要它,否则不要使用它。

票数 11
EN

Stack Overflow用户

发布于 2011-06-23 23:38:39

您可以使用.update

代码语言:javascript
复制
masterlist.update((x, False) for x in exceptions if masterlist.has_key(x))
票数 15
EN

Stack Overflow用户

发布于 2011-06-23 23:38:51

您也可以使用in而不是has_key,这会更好一些。

代码语言:javascript
复制
for x in exceptions:
    if x in masterlist:
        masterlist[x] = False

但我不认为使用if语句来实现此目的有什么问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6456718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档