Python - 从另一个列表中减去一组字典

2024-05-14 09:31:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我感兴趣的是比较多个列表,取其差异并进行迭代。在

两者都是包含以下键的dict列表: 'ssid'-str,'bssid'-str,'channel'-int,'flags'-list,'found'-bool

我试过:

 list = list(set(networks_list).difference(missing_networks))

但我收到了一个错误:

^{pr2}$

我的数据结构如下:

list: [{'found': False, 'flags': ['WPA2-PSK-CCMP', 'WPS', 'ESS'], 'ssid': 'SOHO_BROADCAST', 'bssid': '30:46:9a:9d:11:1a', 'channel': 1}, {'found': False, 'flags': ['WPA-EAP-TKIP', 'WPA2-EAP-CCMP', 'ESS'], 'ssid': 'Cisco 2.4ghz', 'bssid': '40:f4:ec:7f:3c:5a', 'channel': 11}, {'found': False, 'flags': ['WPA-EAP-TKIP', 'WPA2-EAP-CCMP', 'ESS'], 'ssid': 'Cisco 5.0ghz', 'bssid': '40:f4:ec:7f:3c:54', 'channel': 149}]

缺少的网络最初是空的。在

有简单的方法吗?在


Tags: false列表channellistwpaflagsnetworksfound
3条回答

像这样的通用方法可能有很多缺陷,但是如果您的字典主要是基本的,而不是很大,您可以这样做:

假设您的数据如下所示:

networks = [
        {'address': '192.168.1.1'},
        {'address': '127.0.0.1'},
    ]

missing = [
        {'address': '127.0.0.1'}
    ]

可以将字典列表转换为列表元组(可散列)

^{2}$

然后减去

diff = set(networks_hashable).difference(missing_hashable)

现在您有一个元组列表

print list(diff)

或者,转换回字典

print [dict(x) for x in diff]

更新

我根据@gnibbler的评论修改了make_hashable的定义。在

与其让它们成为dict的列表,不如让它们成为实现__eq__和{}的对象列表,您提供的代码应该可以工作

dict是可变项。这意味着它在其生命周期中没有固定的哈希值,并且不能放入一个集合中。在

如果你用相同的函数把所有的dict转换成字符串,它们就可以散列了,你可以在一个集合中使用它们。。。在

相关问题 更多 >

    热门问题