Python:更新集合中的对象
我创建了这个类:Python:更新集合中的对象,python,Python,我创建了这个类: class Device(object): """Holds searched SSID, searched BSSID and own MAC-Addr information about a device""" def __init__(self, mac): self.mac = mac self.bssid_set = set() self.ssid_set = set() de
class Device(object):
"""Holds searched SSID, searched BSSID and
own MAC-Addr information about a device"""
def __init__(self, mac):
self.mac = mac
self.bssid_set = set()
self.ssid_set = set()
def add_bssid(self, bssid):
self.bssid_set.add(bssid)
def add_ssid(self, ssid):
self.ssid_set.add(ssid)
def __str__(self):
ssid_str = ', '.join(self.ssid_set)
bssid_str = ', '.join(self.bssid_set)
return "{mac} has searched for {ssid_str} and {bssid_str}".format(
mac = self.mac,
ssid_str = ssid_str,
bssid_str = bssid_str)
我想创建这个类的多个对象,将它们放在一个集合中(没有重复项),并且每当我发现一个新的探测请求有另一个ssid或bssid时更新这些对象,所以集合的标识符应该是mac
要么我太盲目,看不到如何正确使用集合,要么我在这里尝试了错误的东西,因为更新集合只会添加一个新对象,但我不需要这个
用这样一句话会更明智吗:
mac = 'abcd'
ssid = set(['ssid1', 'ssid2'])
bssid = set(['bssid1', 'bssid2'])
dict[mac] = [ssid.update('newssid'), bssid.update('newbssid')]
或者这里的蟒蛇式方式是什么
编辑:在dict中不小心在mac周围放了“”我会用“你在这里尝试错误的东西”
集合中的对象不应更改。如果您做了一些意外更改对象哈希(或比较结果)的事情,则会发生不好的事情,您可能会得到重复的或丢失的对象。集合也不允许您通过索引检索内容,因此如果您需要修改任何内容,您应该查看整个集合并创建一个包含所需修改的新集合。(是的,您可以通过散列和比较忽略内部集合的方式实现它,但是……为什么?)
如果您只在标准字典中保留一个
mac->Device
映射,可能会更容易,因为您总是将mac作为一个自然查找键。Defaultdict可以完成您的类正在做的事情
from collections import defaultdict
d = defaultdict(dict)
d['mac1']['bssid']=set()
d['mac1']['ssid']=set()
d
输出:
defaultdict(dict, {'mac1': {'bssid': set(), 'ssid': set()}})
Set根据
\uuuu hash\uuu
函数返回的值标识对象的唯一性。您可以使用标识对象唯一性所需的逻辑重写此函数。同时检查:好的,我只是不确定我是否走错了路,但看起来我走错了。谢谢:)