Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从列表生成字典并删除所有空白_Python_Bash - Fatal编程技术网

Python 如何从列表生成字典并删除所有空白

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

我有以下“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: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'}