我知道你可以使用setdefault(key,value)为给定的键设置默认值,但是有没有办法在创建dict之后将所有键的默认值设置为某个值?如何将默认值设置为Python中的字典对象的所有键?
换句话说,我想让字典为我还没有设置的每个键返回指定的默认值。
我知道你可以使用setdefault(key,value)为给定的键设置默认值,但是有没有办法在创建dict之后将所有键的默认值设置为某个值?如何将默认值设置为Python中的字典对象的所有键?
换句话说,我想让字典为我还没有设置的每个键返回指定的默认值。
您可以用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
的 “绝招” 这里是一个defaultdict
可以用另一个dict
进行初始化。这意味着 您在正常dict
保留现有的值:
>>> d['foo']
123
创建之后没有。但是您可以首先使用defaultdict
,它在初始化时设置默认值。
defaultdict
可以为你做这样的事情。
例子:
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d
defaultdict(<class 'list'>, {})
>>> d['new'].append(10)
>>> d
defaultdict(<class 'list'>, {'new': [10]})
defaultdict可以帮助OP,但这个例子是无关紧要的..... – 0xc0de 2015-12-17 10:06:04
这是你想要的东西:
>>> 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
+1为'lambda'键,我被困在那里。 – Droogans 2012-02-23 22:29:50
如果你实际上意味着你似乎要问什么,我会提供这替代答案。
你说你想要的字典来回指定的值,你不说你要设置,在价值的同时,像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
使用defaultdict
from collections import defaultdict
a = {}
a = defaultdict(lambda:0,a)
a["anything"] # => 0
这是我们eful的情况下,像这样,在默认值每个键被设置为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']
非常简洁,谢谢! – kmarsh 2014-05-19 15:27:06
您可以使用下面的类。只需将零更改为您喜欢的任何默认值即可。该解决方案在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)
你在说什么这套“所有钥匙”?即使您将自己限制为例如无限量的潜在按键字符串。你能举个例子吗? – delnan 2012-02-04 09:44:08
你可以使用get方法,'a.get(k [,x])a [k]如果k在a中,否则x' – Anycorn 2012-02-04 09:46:02
反方向有些帮助:http://stackoverflow.com/questions/7688453/如何修复默认值从字典pythonically – aitchnyu 2012-02-04 10:27:11