等同词典和全球问题的问题

时间:2015-01-27 18:06:44

标签: python-3.x equality defaultdict

试图找到两个词典联合的最佳方式。这是我的代码。计数器是我找到的选项之一。

    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

1 个答案:

答案 0 :(得分:3)

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

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

请注意,不是引发TypeError__eq__应返回NotImplemented sentinel对象,以表示不支持相等性测试:

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

作为旁注,in成员资格运算符已经返回TrueFalse,因此无需在__contains__中使用条件表达式;以下就足够了:

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

您的代码实际上从未对传递过的items执行任何操作,也无法计算项目。您的count()方法只需查找self.bag_items中的元素,并在正确跟踪计数后返回计数。