Python字典在第一个之后不添加后续键

标签 python algorithm dictionary data-structures

对 Python 相当陌生,我无法弄清楚这一点。我去给字典添加一个键,它添加得很好。我什至可以用新值更新同一个键,但是当我向字典添加第二个键时,它不会添加第二个键值对。

class CountedSet:
    def __init__(self):
        self.data = {}
    def __iadd__(self,other):
        if isinstance(other,int):
            self.data[other] = self.data.get(other, 0) + 1
            return self
        elif isinstance(other,CountedSet):
            #TODO::iterate through second countedSet and update self
            return self
    def __add__(self,obj):
        for key, value in obj.data.items():
            if len(self.data) == 0:
                self.data[key] = value
            elif self.data[key]:
                self.data[key] = self.data[key] + value
            else:
                self.data[key] = value
        return self
    def __getitem__(self,item):
        if item in self.data:
            return self.data.get(item)
        else:
            return None
    def __str__(self):
        for key, value in self.data.items():
            return("{%s,%s}" % (key,value))
a = CountedSet()
a += 17
a += 4
print(a)

这只是在我希望看到 {17,1} {4,1} 时输出 {17,1}

最佳答案

您的 __str__ 实现在 for 循环的第一次迭代中返回:

def __str__(self):
    for key, value in self.data.items():
        return("{%s,%s}" % (key,value)) # here

也许你想要这样的东西:

def __str__(self):
    return " ".join([{"{%s,%s}" % (k,v) for k, v in self.data.items()])

或者,没有理解:

def __str__(self):
    items = []
    for key, value in self.data.items():
        items.append("{%s,%s}" % (key,value))
    return ' '.join(items)

关于Python字典在第一个之后不添加后续键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46333939/

相关文章:

dictionary - 为什么我无法获得与在 Groovy 中映射的完全相同的 GString?

python - 将每日数据重新采样为每小时数据帧并复制内容

python - 使用 python 和 PIL 分割图像以计算多个矩形对象的质心和旋转

c# - 如何将 "zip"或 "rotate"列为可变数量的列表?

algorithm - 持续更新优先级队列的最佳算法/数据结构

python - 在检查重复小数时实现长除法

dictionary - Clojure - 在最内层过滤嵌套映射

python - 查找字符串中出现次数最多的字符

python - Python 3.4.1 中的 wxPython

python - 分隔符 pandas 列左侧的条件 strip 值