一个类有一个构造函数,它接受一个参数:
class C(object):
def __init__(self, v):
self.v = v
...
Run Code Online (Sandbox Code Playgroud)
在代码的某处,dict中的值可以用来知道它们的键.
我想使用defaultdict,并将密钥传递给新生默认值:
d = defaultdict(lambda : C(here_i_wish_the_key_to_be))
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我正在调试一些代码,我想知道何时访问特定的字典.好吧,它实际上是一个子类dict并实现了一些额外功能的类.无论如何,我想做的是dict自己子类化并添加覆盖__getitem__并__setitem__产生一些调试输出.现在,我有
class DictWatch(dict):
def __init__(self, *args):
dict.__init__(self, args)
def __getitem__(self, key):
val = dict.__getitem__(self, key)
log.info("GET %s['%s'] = %s" % str(dict.get(self, 'name_label')), str(key), str(val)))
return val
def __setitem__(self, key, val):
log.info("SET %s['%s'] = %s" % str(dict.get(self, 'name_label')), str(key), str(val)))
dict.__setitem__(self, key, val)
Run Code Online (Sandbox Code Playgroud)
' name_label'是一个最终将设置的键,我想用它来识别输出.然后我改变了我正在修改的类DictWatch而不是dict更改了对超级构造函数的调用.但是,似乎没有任何事情发生.我以为我很聪明,但我想知道我是否应该走另一个方向.
谢谢您的帮助!
我需要类似的东西defaultdict.但是,对于任何不在字典中的键,它应该返回键本身.
最好的方法是什么?
最近我一直在做很多基于音乐的编程,因此我发现自己在处理某些歌曲中缺少的元数据方面做了很多这样的事情:
default = {'title': 'Unknown title', 'artist': 'unknown Artist'}
default.update(song)
print '{title} - {artist}'.format(**default)
Run Code Online (Sandbox Code Playgroud)
有更清洁的方法吗?我尝试覆盖__missing__,但缺少键仍然会引发KeyError:
class Song(dict):
# dictionary with some nice stuff to make it nicer
def __missing__(self, key):
return 'Unknown {key}'.format(key = key)
Run Code Online (Sandbox Code Playgroud)
编辑:对不起,我应该更清楚,基本上以下必须工作.
s = Song()
print '{notAKey}'.format(s)
Run Code Online (Sandbox Code Playgroud)
有几个人指出**是没有必要的.
编辑2:我"解决"了我的问题,至少让我感到满意.这是否更清洁是有争议的,但它对我有用.
from string import Formatter
class DefaultFormatter(Formatter):
def get_value(self, key, args, kwargs):
# Try standard formatting, then return 'unknown key'
try:
return Formatter.get_value(self, key, args, kwargs)
except KeyError:
return kwargs.get(key, 'Unknown {0}'.format(key))
class Song(dict):
def format(self, formatString):
# …Run Code Online (Sandbox Code Playgroud) 函数collections.defaultdict返回一个默认值,如果我的字典中没有键,则可以由我自己制作的lambda函数定义.
现在,我希望我的defaultdict返回未修改的键值,如果该键不存在.因此,我使用lambda标识函数lambda x:x.我希望defaultdict返回密钥.
>>>translation=defaultdict(lambda x:x)
>>>translation['Haus']='maison'
>>>translation['computer']='ordinateur'
>>>translation['computer']
'ordinateur'
Run Code Online (Sandbox Code Playgroud)
但是,当我用迄今为止缺席的密钥呈现我的defaultdict时:
>>>translation['email']
Run Code Online (Sandbox Code Playgroud)
我希望defaultdict转换返回'email'.然而,python 2.7说:
TypeError: <lambda>() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)
当然,我正在做一些愚蠢的事情.但是什么?
假设您在下面定义了一个名为 mydict 的字典,并且您寻找一个名为“D”的键。
mydict = {'A':'a',
'B':'b',
'C':'c'}
mydict['D']
Run Code Online (Sandbox Code Playgroud)
所需的输出应该是“D”,即您输入的确切输出。有没有办法用默认字典来做到这一点?