试图找到两个词典联合的最佳方式。这是我的代码。计数器是我找到的选项之一。
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
答案 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
成员资格运算符已经返回True
或False
,因此无需在__contains__
中使用条件表达式;以下就足够了:
def __contains__(self, include):
return include in self.bag_items
您的代码实际上从未对传递过的items
执行任何操作,也无法计算项目。您的count()
方法只需查找self.bag_items
中的元素,并在正确跟踪计数后返回计数。