簡體   English   中英

如何在python中為dict對象的所有鍵設置默認值?

[英]How to set default value to all keys of a dict object in python?

我知道你可以使用setdefault(key,value)來設置給定鍵的默認值,但有沒有辦法在創建dict后將所有鍵的默認值設置為某個值?

換句話說,我希望dict為我尚未設置的每個鍵返回指定的默認值。

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

這里的“技巧”是可以用另一個dict初始化defaultdict 這意味着您保留普通dict的現有值:

>>> d['foo']
123

使用defaultdict

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

這對於這樣的情況非常有用,其中每個鍵的默認值設置為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']

如果你真的是指你似乎問的問題,我會提供這個替代答案。

你說你希望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

使用這樣:

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

或者,您可以使用這樣的標准dict

d = {3: 9, 4: 2}
default = 99
print d.get(3, default)  # 9
print d.get(42, default) # 99

這是你想要的嗎:

>>> d={'a':1,'b':2,'c':3}
>>> default_val=99
>>> for k in d:
...     d[k]=default_val
...     
>>> d
{'a': 99, 'b': 99, 'c': 99}
>>> 

>>> d={'a':1,'b':2,'c':3}
>>> from collections import defaultdict
>>> d=defaultdict(lambda:99,d)
>>> d
defaultdict(<function <lambda> at 0x03D21630>, {'a': 1, 'c': 3, 'b': 2})
>>> d[3]
99

您可以使用以下課程。 只需將零更改為您喜歡的任何默認值。 該解決方案在Python 2.7中進行了測試。

class cDefaultDict(dict):
    # dictionary that returns zero for missing keys
    # keys with zero values are not stored

    def __missing__(self,key):
        return 0

    def __setitem__(self, key, value):
        if value==0:
            if key in self:  # returns zero anyway, so no need to store it
                del self[key]
        else:
            dict.__setitem__(self, key, value)

不是在創建它之后,沒有。 但您可以首先使用defaultdict ,它在初始化時設置默認值。

defaultdict可以為你做類似的事情。

例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM