我怎样才能使"完美"成为dict的子类?最终目标是有一个简单的字典,其中键是小写的.
似乎应该有一些微小的原语我可以覆盖以使这项工作,但根据我的所有研究和尝试似乎情况并非如此:
如果我覆盖__getitem__/__setitem__,则get/ set不起作用.我怎样才能让他们工作?当然我不需要单独实施它们?
我是否阻止酸洗工作,我是否需要实施__setstate__等?
我应该只使用mutablemapping(似乎不应该使用UserDict
或DictMixin)?如果是这样,怎么样?文档并不完全具有启发性.
这是我的第一次尝试,get()不起作用,毫无疑问还有许多其他小问题:
class arbitrary_dict(dict):
"""A dictionary that applies an arbitrary key-altering function
before accessing the keys."""
def __keytransform__(self, key):
return key
# Overridden methods. List from
# https://stackoverflow.com/questions/2390827/how-to-properly-subclass-dict
def __init__(self, *args, **kwargs):
self.update(*args, **kwargs)
# Note: I'm using dict directly, since super(dict, self) doesn't work. …Run Code Online (Sandbox Code Playgroud) 这是我的第一篇文章,我对编程很陌生,所以我可能无法恰当地传达我的问题,但我会尽我所能!
tries_dict = {1:'first', 2:'second', 3:'third', 4:'fourth', ub_tries:'last'}
ub_tries = user input
tries = 1
input ('\nCome on make your ' + tries_dict.get(tries) + guess: ')
Run Code Online (Sandbox Code Playgroud)
这三个元素是我创建的数字猜测游戏的一部分,我将它们包含在每个错误答案之后的while循环中tries += 1.
正如您所看到的,在我的字典中,前4个答案的自定义值和游戏结束前的最后可能机会,所以这是我尝试做的:
我想找到一种方法,在'4th'和'last'之间为每个答案/键设置'NEXT'值.
如:
tries = 5
Come on make your next guess
tries = 6
Come on make your next guess
Run Code Online (Sandbox Code Playgroud)
等等
我确实找到了一种带有复杂循环的方法,但是我想知道更好的/实用的方法来实现这一点.
以下是我想到的一些选项,但无法开始工作:
ub_tries并将该列表用作键所以一般来说:如何创建一种方法来获得未在字典中指定的键的一般答案(下一个或其他)?
任何反馈都会非常感激,随时可以要求澄清,因为我可以告诉自己我的问题有点混乱.
我希望我在编程和提出相关问题时变得更加狡猾,到目前为止,我的编程几乎和我的总结技巧一样混乱,感叹!