python - 将字典理解自分配给 dict 中的类

标签 python class dictionary dictionary-comprehension

我正在从 dict 对象创建一个子类

class FeatureVector(dict):

    def __init__(self, init_val=0):
        super().__init__()
        self.init_val = init_val

在这个类中,我尝试使用字典理解自分配一个函数,如下简化示例:

    def load_fv(self, fvlist):
        self = {k:float(val) for k, val in fvlist}

在此示例中,fvlist 的构建方式如下:

fvlist = [["example", 1], ["feature", 2], ["vector", 3], ["list", 4]]

这个load_fv方法不起作用。字典仍为空:{}

经过一番搜索,我发现这是因为 self 是不可变的,如下所述:Why is `self` in Python objects immutable?

所以也许我只是想做一些我不应该做的事情。当然,可以创建一个使用 for 循环进行字典理解的函数:

    def load_fv(self, fvlist):
        self.clear()
        for x, y in fvlist:
            self[x] = y 

我仍然可以想象,如果字典已经可用,或者当我想用字典初始化类似字典的对象时,“自分配”字典给字典子类可能会更有效。

在这种情况下我可以这样做:

    def __init__(self, init_dict, init_val=0):
        super().__init__()
        self.init_val = init_val
        self.load_fv(fvlist)

    def load_fv(self, fvlist):
        self.clear()
        if isinstance(fvlist, dict) or isinstance(fvlist, FeatureVector):
            fvlist = [[key, val] for key, val in fvdict.items()]
        for x, y in fvlist:
            self[x] = y 

但这仍然感觉不太优雅和简洁。有没有更好的单行/不那么冗长的方式?

最佳答案

你试过这个吗?

def __init__(self, init_dict, init_val=0):
    super().__init__()
    self.init_val = init_val
    self.update(init_dict)
    # Here init_dict is a dictionary or a dictionary like object

update 方法将提供的字典添加到自身。

关于python - 将字典理解自分配给 dict 中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28034506/

相关文章:

php - 类中的文本方向不适用于 tr

python - 从 GUI 类外部访问 GUI 元素

python - 为什么 df.where() 不替换所有空值?

c++ - 基对象作为接受派生对象的函数的参数

python - 动态创建字典键,我可以在其中附加附加值?

python - 在 Python 字典中获取键/值对的所有组合

python - 在 Python 中合并不同列表中的字典

python - 在 Openerp 中使功能字段可编辑?

python - 如何根据XML中XPath中子节点的值获取特定的 block (组)?

java - 在运行时在java中创建类的实例