itertools 组合和产品 [关闭]

Posted

技术标签:

【中文标题】itertools 组合和产品 [关闭]【英文标题】:itertools combinations and products [closed] 【发布时间】:2021-12-09 03:35:28 【问题描述】:

我正在尝试了解 itertools 库,我的数据看起来像这样。

devices = ['devicea', 'deviceb', 'devicec']
data = 'devicea': ['ip': '192.168.1.1', 'vrf': 'aaa', 'ip': '192.168.1.2', 'vrf': 'aaa'],
        'deviceb': ['ip': '10.1.1.1', 'vrf': 'bbb', 'ip': '10.1.1.2', 'vrf': 'bbb'],
        'devicec': ['ip': '20.1.1.1', 'vrf': 'ccc', 'ip': '20.1.1.2', 'vrf': 'ccc']

我想得到设备组合的ip的产品,例如结果应该是这样的。

[(192.168.1.1, 10.1.1.1), (192.168.1.1, 10.1.1.2), (192.168.1.1, 20.1.1.1), 192.168.1.1, 20.1.1.2), (192.168.1.2, 10.1.1.1), (192.168.1.2, 10.1.1.2), (192.168.1.2, 20.1.1.1), (192.168.1.2, 20.1.1.2), (10.1.1.1, 20.1.1.1), (10.1.1.1, 20.1.1.2), (10.1.1.2, 20.1.1.1), (10.1.1.2, 20.1.1.2)]

使用 itertools.combinations 我可以获得设备的可能组合对。

device_combination = itertools.combinations(devices, 2)

如何使用 itertools.products 查找 ip 地址的产品?

【问题讨论】:

当你可以只使用data.keys() 时,为什么还需要devices 列表? 【参考方案1】:

使用itertools.combinations() 获取所有设备对。然后对于每一对,使用itertools.product() 得到 IP 的叉积,并将它们添加到结果中。

result = []
for d1, d2 in itertools.combinations(data.values(), 2):
    result.extend(itertools.product([i['ip'] for i in d1], [i['ip'] for i in d2])

【讨论】:

以上是关于itertools 组合和产品 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何“多处理” itertools 产品模块?

python 相见恨晚的itertools库

从 itertools 产品创建数据框

python itertools 产品重复到大

使用 itertools 创建 numpy 数组

itertools 排列组合