将字典和全球问题等同起来的问题
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 为 True
或 False
,无需在 __contains__
;以下就够了:
def __contains__(self, include):
return include in self.bag_items
然而,您的代码实际上从未对传入的 items
执行任何操作,您也从未对项目进行计数。一旦您正确跟踪计数,您的 count()
方法应该只查找 self.bag_items
中的元素和 return 计数。
正在尝试找出合并两个词典的最佳方法。这是我的代码。计数器是我找到的选项之一。
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 为 True
或 False
,无需在 __contains__
;以下就够了:
def __contains__(self, include):
return include in self.bag_items
然而,您的代码实际上从未对传入的 items
执行任何操作,您也从未对项目进行计数。一旦您正确跟踪计数,您的 count()
方法应该只查找 self.bag_items
中的元素和 return 计数。