Python 如何从列表生成字典并删除所有空白
我有以下“arp-a”命令输出列表,只要检测到网络中的设备,该命令输出就会持续Python 如何从列表生成字典并删除所有空白,python,bash,Python,Bash,我有以下“arp-a”命令输出列表,只要检测到网络中的设备,该命令输出就会持续 ['XX.1.60.XX ether XX:16:35:b2:c9:XX C wlan0', 'XXX.168.42.XXX ether XX:35:cd:e8:a5:XX C usb0', 'XX.1.62.XXX ether XX:9f:d
['XX.1.60.XX ether XX:16:35:b2:c9:XX C wlan0', 'XXX.168.42.XXX ether XX:35:cd:e8:a5:XX C usb0', 'XX.1.62.XXX ether XX:9f:db:72:61:XX C wlan0', '']
我希望生成一个字典,ip地址作为密钥,硬件地址作为值,即:
{ 'XX.1.60.XX': XX:16:35:b2:c9:XX, 'XXX.168.42.XXX': 'XX:35:cd:e8:a5:XX'}
使用split()
data = ['XX.1.60.XX ether XX:16:35:b2:c9:XX C wlan0', 'XXX.168.42.XXX ether XX:35:cd:e8:a5:XX C usb0', 'XX.1.62.XXX ether XX:9f:db:72:61:XX C wlan0', '']
result = {}
for line in data:
try:
ip, _, hardware, _, _ = line.split()
result[ip] = hardware
except ValueError:
# bad line format
pass
print(result)
# {'XX.1.60.XX': 'XX:16:35:b2:c9:XX', 'XXX.168.42.XXX': 'XX:35:cd:e8:a5:XX', 'XX.1.62.XXX': 'XX:9f:db:72:61:XX'}
使用字典理解:
o = ['XX.1.60.XX ether XX:16:35:b2:c9:XX C wlan0', 'XXX.168.42.XXX ether XX:35:cd:e8:a5:XX C usb0', 'XX.1.62.XXX ether XX:9f:db:72:61:XX C wlan0', '']
o = {v[0]: v[2] for v in (v.split() for v in o) if len(v) >= 3}
print(o)
印刷品:
{'XX.1.60.XX': 'XX:16:35:b2:c9:XX', 'XXX.168.42.XXX': 'XX:35:cd:e8:a5:XX', 'XX.1.62.XXX': 'XX:9f:db:72:61:XX'}
{'XX.1.60.XX': 'XX:16:35:b2:c9:XX', 'XXX.168.42.XXX': 'XX:35:cd:e8:a5:XX', 'XX.1.62.XXX': 'XX:9f:db:72:61:XX'}
这可以做到:
out = {re.findall(r'X.*?(?= )',i)[0]: re.findall(r'X.*?(?= )',i)[1] for i in x if i!=''}
收益率:
看起来你想让我们为你写些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。展示这一努力的一个好方法是包含一个。特别是在发帖前检查你完成的内容。到目前为止你做了哪些尝试??它应该是python还是bash??字典是什么意思??请提供更多信息…似乎您删除的不仅仅是空白。最好在一次之前进行拆分,而不是像代码中那样进行多次拆分。
dict(re.findall(r'([\dX.]+)\s.*?([\dX:a-f]+)\s', line)[0] for line in data if line)
# {'XX.1.60.XX': 'XX:16:35:b2:c9:XX', 'XXX.168.42.XXX': 'XX:35:cd:e8:a5:XX', 'XX.1.62.XXX': 'XX:9f:db:72:61:XX'}