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
函数返回的值标识对象的唯一性。您可以使用标识对象唯一性所需的逻辑重写此函数。同时检查:好的,我只是不确定我是否走错了路,但看起来我走错了。谢谢:)