Python:如何将列表拆分为字典列表?
我刚开始学习Python,知道的东西少得可怜,感觉自己一无所知。我想找一些不同的方法,把一个列表分割成多个字典的列表。比如说,这里有一个示例列表:
data = ['ID:0:0:0',
'Status:Ok',
'Name:PhysicalDisk0:0:0',
'State:Online',
'FailurePredicted:No',
'ID:0:0:1',
'Status:Ok',
'Name:PhysicalDisk0:0:1',
'State:Online',
'FailurePredicted:No']
最后得到的字典列表应该是这样的:
[{'Status': 'Ok',
'State': 'Online',
'ID': '0:0:0',
'FailurePredicted': 'No',
'Name': 'PhysicalDisk0:0:0'},
{'Status': 'Ok',
'State': 'Online',
'ID': '0:0:1',
'Name': 'PhysicalDisk0:0:1',
'FailurePredicted': 'No'}]
这个列表里有重复的元素,所以需要多个字典,而且列表的长度也不固定。我觉得我的代码可以简化一下,只是我对Python还不够熟悉。现在我的代码是:
已删除的代码 这个代码没有成功。 :(
----------- File output as requested -------------------
# omreport storage pdisk controller=0
List of Physical Disks on Controller PERC 5/i Integrated (Embedded)
Controller PERC 5/i Integrated (Embedded)
ID : 0:0:0
Status : Ok
Name : Physical Disk 0:0:0
State : Online
Failure Predicted : No
Progress : Not Applicable
Type : SAS
Capacity : 136.13 GB (146163105792 bytes)
Used RAID Disk Space : 136.13 GB (146163105792 bytes)
Available RAID Disk Space : 0.00 GB (0 bytes)
Hot Spare : No
Vendor ID : DELL
Product ID : ST3146755SS
Revision : T107
Serial No. : 3LN1EF0G
Negotiated Speed : Not Available
Capable Speed : Not Available
Manufacture Day : 07
Manufacture Week : 24
Manufacture Year : 2005
SAS Address : 5000C50004731C35
ID : 0:0:1
Status : Ok
Name : Physical Disk 0:0:1
State : Online
Failure Predicted : No
Progress : Not Applicable
Type : SAS
Capacity : 136.13 GB (146163105792 bytes)
Used RAID Disk Space : 136.13 GB (146163105792 bytes)
Available RAID Disk Space : 0.00 GB (0 bytes)
Hot Spare : No
Vendor ID : DELL
Product ID : ST3146755SS
Revision : T107
Serial No. : 3LN1EF88
Negotiated Speed : Not Available
Capable Speed : Not Available
Manufacture Day : 07
Manufacture Week : 24
Manufacture Year : 2005
SAS Address : 5000C500047320B9
5 个回答
当然可以!请看下面的内容:
这段代码的意思是,它会检查某个条件是否成立。如果条件成立,就会执行一段特定的代码;如果条件不成立,就会执行另一段代码。这种方式在编程中非常常见,因为它可以让程序根据不同的情况做出不同的反应。
简单来说,就像你在生活中做决定一样:如果天气好,你就去外面玩;如果下雨,你就待在家里看书。编程也是这样,通过条件判断来决定接下来要做什么。
希望这个解释能帮助你理解这段代码的作用!
import re
results = []
temp = {}
for item in data:
(key, value) = re.search('(.*?):(.*)', item).groups()
if temp.has_key(key): temp = {}
temp[key] = value
if temp not in results: results.append(temp)
如果你只有“每次重复一个键就表示需要开始一个新的字典”这样的信息,那么你的代码只能稍微改进一下,比如这样:
results = []
curd = {}
for x in data:
k, v = x.split(':', 1)
if k in curd:
results.append(curd)
curd = {}
curd[k] = v
results.append(curd)
也就是说,不需要保留一个中间列表 tmp
,而是用一个中间字典 curd
。这两者的含义有点不同——你只有在键和值都相同时才会开始一个新的字典(比如说,像 'Status:Borked'
这样的项会“覆盖”从 'Status:Ok'
开始构建的项),而我只是把键当作标识符(这样就不会出现覆盖的情况)——你确定你实现的确切含义是你所需要的吗?
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,我们可能希望在用户点击一个按钮时,程序才开始运行某段代码。这种情况下,我们就会用到“事件”这个概念。
事件就像是一个信号,告诉程序某件事情发生了。比如,用户点击了按钮、输入了文字,或者移动了鼠标。程序会“监听”这些事件,一旦发生了,就会执行相应的代码。
为了让程序能够处理这些事件,我们通常需要写一些代码来定义这些操作。这就像是给程序设定了一些规则,告诉它在特定情况下该怎么做。
总之,事件处理是让程序与用户互动的重要方式。通过监听和响应事件,程序可以变得更加灵活和智能。
result = [{}]
for item in data:
key, val = item.split(":", 1)
if key in result[-1]:
result.append({})
result[-1][key] = val