Skip to main content
 首页 » 编程设计

Python:更新集合中的对象

2025年02月15日36webabcd

我创建了这个类:

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 .

要么我太盲目,看不到如何正确使用集合,要么我在这里尝试了错误的东西,因为更新集合只是添加了一个新对象,但我不需要这个。

像这样使用 dict 会更明智吗:

mac = 'abcd' 
ssid = set(['ssid1', 'ssid2']) 
bssid = set(['bssid1', 'bssid2']) 
dict[mac] = [ssid.update('newssid'), bssid.update('newbssid')] 

或者去这里的 pythonic 方式是什么?

编辑:不小心把 '' 放在 mac 周围

请您参考如下方法:

Defaultdict 可以做你类(class)正在做的事情

from collections import defaultdict 
 
d = defaultdict(dict) 
d['mac1']['bssid']=set() 
d['mac1']['ssid']=set() 
d 

输出:

defaultdict(dict, {'mac1': {'bssid': set(), 'ssid': set()}})