gpt4 book ai didi

Python:将非特定格式的字符串转换为字典?

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:02 25 4
gpt4 key购买 nike

我正在抓取路由器的已连接设备页面以获取谁在家的列表。如果我设置一个简短的 DHCP 版本,我可以通过不同的方法很容易地做到这一点。但是,我希望能够将以下字符串转换为字典,以更优化的方式完成此操作:

wldev = [['eth1','8C:3A:E3:95:77:21',-85,54000,1000,31365,0],
['eth1','A4:77:33:0C:E0:BE',-41,72223,72223,42239,0],
['eth2','58:B0:35:7A:20:C1',-34,104000,130000,21017,1],
['eth2','A4:77:33:66:BC:F6',-48,39000,58500,43956,1]]

这实际上全部显示在一行中。我能得到的最接近的是使它成为一个元组使用:

wldev = wldev.replace(']','}')
wldev = wldev.replace('eth0\''',', 'eth0\': {').replace('eth1\''',', 'eth1\': {').replace('eth2\''',', 'eth2\': {').replace('br0\''',', 'br0\': {').replace('br1\''',', 'br\': {')
wldev = wldev.replace('0}', '0\'}}').replace('1}', '1\'}}').replace(',','\',\'').replace('\'\'','\'').replace('\',\'{',',{')

但这很丑陋。我是 Python 的新手,对 RegEx 了解不多,但肯定有更简单的方法。可能是一些简单的东西。有什么想法吗?

最佳答案

使用ast.literal_eval() :

Safely evaluate an expression node or a Unicode or Latin-1 encoded string containing a Python literal or container display. The string or node provided may only consist of the following Python literal structures: strings, numbers, tuples, lists, dicts, booleans, and None.

from ast import literal_eval

print(literal_eval(wldev))

演示:

>>> from ast import literal_eval
>>>
>>> wldev = """[['eth1','8C:3A:E3:95:77:21',-85,54000,1000,31365,0],
... ['eth1','A4:77:33:0C:E0:BE',-41,72223,72223,42239,0],
... ['eth2','58:B0:35:7A:20:C1',-34,104000,130000,21017,1],
... ['eth2','A4:77:33:66:BC:F6',-48,39000,58500,43956,1]]"""
>>>
>>> literal_eval(wldev)
[['eth1', '8C:3A:E3:95:77:21', -85, 54000, 1000, 31365, 0], ['eth1', 'A4:77:33:0C:E0:BE', -41, 72223, 72223, 42239, 0], ['eth2', '58:B0:35:7A:20:C1', -34, 104000, 130000, 21017, 1], ['eth2', 'A4:77:33:66:BC:F6', -48, 39000, 58500, 43956, 1]]

结果,您将打印出一个 Python 列表列表。要用它制作字典,并且由于子列表中的第一项不是唯一的,我会使用 collections.defaultdict() :

from collections import defaultdict

l = literal_eval(wldev)

d = defaultdict(list)
for item in l:
d[item[0]].append(item[1:])

关于Python:将非特定格式的字符串转换为字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35096495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com