将字典和全球问题等同起来的问题

issue with equating dictionaries and global issue

正在尝试找出合并两个词典的最佳方法。这是我的代码。计数器是我找到的选项之一。

    def __add__(self,right):
        mergedbag = Bag()
        mergedbag.bag_value = copy.copy(self.bag_value)
        for item in right.bag_value.keys():
            mergedbag.bag_value[item] += right.bag_value[item]
        return mergedbag

要测试两个词典的内容是否相同,只需使用相等性测试即可:

self.bag_items == bag_equal.bag_items

Python 有效地进行了此比较测试;键和值必须完全匹配,长度不同意味着字典不相等:

>>> a = {'a': 'b'}
>>> b = {'a': 'b'}
>>> a == b
True
>>> b['b'] = 'c'
>>> a == b
False
>>> del b['b']
>>> b['a'] = 'c'
>>> a == b
False
>>> b['a'] = 'b'
>>> a == b
True

请注意,__eq__ 不应引发 TypeError,而应 return NotImplemented 哨兵对象表示不支持相等性测试:

def __eq__(self, other):
    if not isinstance(other, Bag):
        return NotImplemented
   return self.bag_items == other.bag_items

作为旁注,in 成员运算符已经 return 为 TrueFalse,无需在 __contains__;以下就够了:

def __contains__(self, include):
    return include in self.bag_items

然而,您的代码实际上从未对传入的 items 执行任何操作,您也从未对项目进行计数。一旦您正确跟踪计数,您的 count() 方法应该只查找 self.bag_items 中的元素和 return 计数。