相关疑难解决方法(0)

如何"完美"覆盖一个字典?

我怎样才能使"完美"成为dict的子类?最终目标是有一个简单的字典,其中键是小写的.

似乎应该有一些微小的原语我可以覆盖以使这项工作,但根据我的所有研究和尝试似乎情况并非如此:

这是我的第一次尝试,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)

python inheritance dictionary get set

204
推荐指数
5
解决办法
10万
查看次数

如何检查变量是否是python 2和3兼容性的字符串

我知道我可以使用:isinstance(x, str)在python-3.x中但是我需要检查python-2.x中是否有某个字符串.将isinstance(x, str)在python-2.x中按预期工作?或者我需要检查版本并使用isinstance(x, basestr)

具体来说,在python-2.x中:

>>>isinstance(u"test", str)
False
Run Code Online (Sandbox Code Playgroud)

和python-3.x没有 u"foo"

python string python-2.x python-3.x

163
推荐指数
7
解决办法
7万
查看次数

不区分大小写的替换

在Python中进行不区分大小写的字符串替换的最简单方法是什么?

python string case-insensitive

160
推荐指数
8
解决办法
8万
查看次数

不区分大小写的字典搜索?

我可以使用map来用Python实现不区分大小写的列表搜索.

a = ['xyz', 'wMa', 'Pma'];

b = map(string.lower, a)
if 'Xyz'.lower() in b:
    print 'yes'
Run Code Online (Sandbox Code Playgroud)

我怎么能用字典做同样的事情?

我尝试了下面的代码,但是ap有['a','b','c']的列表,而不是不区分大小写的字典.

a = {'a':1, 'B':2, 'c':3}
ap = map(string.lower, a)
Run Code Online (Sandbox Code Playgroud)

python dictionary

27
推荐指数
5
解决办法
5万
查看次数

有没有办法从 dict 和 collections.abc.MutableMapping 一起子类化?

为了举例,让我们假设我想子类化dict并把所有的键都大写:

class capdict(dict):
    def __init__(self,*args,**kwds):
        super().__init__(*args,**kwds)
        mod = [(k.capitalize(),v) for k,v in super().items()]
        super().clear()
        super().update(mod)
    def __getitem__(self,key):
        return super().__getitem__(key.capitalize())
    def __setitem__(self,key,value):
        super().__setitem__(key.capitalize(),value)
    def __delitem__(self,key):
        super().__detitem__(key.capitalize())
Run Code Online (Sandbox Code Playgroud)

这在一定程度上起作用,

>>> ex = capdict(map(reversed,enumerate("abc")))
>>> ex
{'A': 0, 'B': 1, 'C': 2}
>>> ex['a']
0
Run Code Online (Sandbox Code Playgroud)

但是,当然,仅适用于我记得要实现的方法,例如

>>> 'a' in ex
False
Run Code Online (Sandbox Code Playgroud)

不是想要的行为。

现在,填充可以从“核心”方法派生的所有方法的懒惰方式将混合在collections.abc.MutableMapping. 只是,它在这里不起作用。我认为是因为所讨论的方法(__contains__在示例中)已经由dict.

有没有办法吃我的蛋糕并吃掉它?一些魔法让MutableMapping只看到我已经覆盖的方法,以便它基于这些重新实现其他方法?

python python-3.x

26
推荐指数
1
解决办法
1734
查看次数