如何在python中为dict对象的所有键设置默认值?

Der*_*ang 53 python dictionary

我知道你可以使用setdefault(key,value)来设置给定键的默认值,但有没有办法在创建dict后将所有键的默认值设置为某个值?

换句话说,我希望dict为我尚未设置的每个键返回指定的默认值.

Mar*_*ler 95

您可以用以下内容替换旧字典defaultdict:

>>> from collections import defaultdict
>>> d = {'foo': 123, 'bar': 456}
>>> d['baz']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'baz'
>>> d = defaultdict(lambda: -1, d)
>>> d['baz']
-1
Run Code Online (Sandbox Code Playgroud)

这里的"技巧"是a defaultdict可以用另一个初始化dict.这意味着您保留正常中的现有值dict:

>>> d['foo']
123
Run Code Online (Sandbox Code Playgroud)

  • @yiwei使用现有`dict`中的值初始化`defaultdict`.问题说"我希望dict为我尚未设置的每个键返回指定的默认值." 并且这样做的方法是创建一个用旧的`dict`初始化的`defaultdict`. (2认同)

Abh*_*aya 8

使用defaultdict

from collections import defaultdict
a = {} 
a = defaultdict(lambda:0,a)
a["anything"] # => 0
Run Code Online (Sandbox Code Playgroud)

这对于这样的情况非常有用,其中每个键的默认值设置为0:

results ={ 'pre-access' : {'count': 4, 'pass_count': 2},'no-access' : {'count': 55, 'pass_count': 19}
for k,v in results.iteritems():
  a['count'] += v['count']
  a['pass_count'] += v['pass_count']
Run Code Online (Sandbox Code Playgroud)


Rik*_*ggi 6

defaultdict可以为你做类似的事情。

例子:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d
defaultdict(<class 'list'>, {})
>>> d['new'].append(10)
>>> d
defaultdict(<class 'list'>, {'new': [10]})
Run Code Online (Sandbox Code Playgroud)


Lau*_*low 6

如果你真的是指你似乎问的问题,我会提供这个替代答案.

你说你希望dict 返回一个指定的值,你不是说你想同时设置那个值,就像defaultdict那样.这样做:

class DictWithDefault(dict):
    def __init__(self, default, **kwargs):
        self.default = default
        super(DictWithDefault, self).__init__(**kwargs)

    def __getitem__(self, key):
        if key in self:
            return super(DictWithDefault, self).__getitem__(key)
        return self.default
Run Code Online (Sandbox Code Playgroud)

使用这样:

d = DictWIthDefault(99, x=5, y=3)
print d["x"]   # 5
print d[42]    # 99
42 in d        # False
d[42] = 3
42 in d        # True
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用以下标准dict:

d = {3: 9, 4: 2}
default = 99
print d.get(3, default)  # 9
print d.get(42, default) # 99
Run Code Online (Sandbox Code Playgroud)