【发布时间】:2021-09-17 10:59:49
【问题描述】:
我是 Python 新手,正在寻求帮助。我的字典列表如下:
data = [
{'device_id': 'D11', 'ipv4': '1.1.1.1'},
{'device_id': 'D42', 'ipv4': '1.1.1.2'},
{'device_id': 'D32', 'hostname': 'MVPQ021'},
{'device_id': 'D94', 'ipv6': '2001:0db8:0:7334'}
]
我只需要获取 IP 地址列表如下:
['1.1.1.1', '1.1.1.2', '2001:0db8:0:7334']
我尝试了以下方法,得到了我想要的结果:
result = []
for x in data:
if 'ipv4' in x.keys():
result.append(x['ipv4'])
continue
if 'ipv6' in x.keys():
result.append(x['ipv6'])
但是,对于非常长的列表,例如包含 1000 多个元素,此解决方案效率不高。
是否有任何优化的方法可以只过滤掉 ipv4 和 ipv6 值而不迭代列表中的每个元素?
【问题讨论】:
-
对于 1000+ ?多少钱 ?它应该一秒钟完成。我在 4 秒内跑了 10M
-
我怀疑这个循环在其他循环中
-
我们所说的
+比 1000 多多少?除非在马铃薯电脑上执行,否则它应该非常很大,然后才会注意到性能问题。 -
@SakshmKhare,如果您使用的是 Python 3.8+。我添加了一个答案以利用海象运算符并使用列表理解(无循环)。
-
@lmiguelvargasf 要清楚,仍然存在一个 循环,您必须访问每个元素。同样从某种意义上说,列表推导被实现为 Python 级别的 for 循环,末尾带有
list.append。它们可能会稍微快一些,因为list.append已缓存(您不必解析属性.append),而且我相信还有一个小的字节码技巧。
标签: python list dictionary optimization time-complexity