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()

    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()}})

关于Python:更新集合中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41740497/

相关文章:

python - Opencv 不适用于 python?

python 通过 name-as-string -inverse eval 访问变量

python - 如何在 Racket 中使用#lang 加载更多语言

python - 是否有类似于单元测试的 assertIsNone(x) 中的 pytest 方法

python - 如何有效地通过该列模块划分列的每个元素?

python - 为什么 ndb.Model 子类在填充时会扩展?

python - 在 Python 中的文本文件的特定行中附加数据?

python - 如何从带有parent_id的dict创建带有children的dict

python - 将背景颜色添加到作为子布局的布局(在另一个布局内)

python - 将 PuTTY/ppk 私钥加载到 Paramiko 时为 "base64 decoding error: Incorrect padding"