【发布时间】:2016-01-04 18:03:30
【问题描述】:
我有一个文件,其中包含这种格式的行。
Example 1:
nextline = "DD:MM:YYYY INFO - 'WeeklyMedal: Hole = 1; Par = 4; Index = 2; Distance = 459; Score = { Player1 = 4 };"
Example 2:
nextline = "DD:MM:YYYY INFO - 'WeeklyMedal: Hole = 1; Par = 4; Index = 2; Distance = 459; Score = { Player1 = 4; Player2 = 6; Player3 = 4 };"
我首先用 ':' 分割行,这给了我一个包含 2 个条目的列表。 我想将此行拆分为带有键和值的字典,但其中的分数键有多个带有值的子键。
Hole 1
Par 4
Index 2
Distance 459
Score
Player1 4
Player2 6
Player3 4
所以我正在使用这样的东西......
split_line_by_semicolon = nextline.split(":")
dictionary_of_line = dict((k.strip(), v.strip()) for k,v in (item.split('=')
for item in split_line_by_semicolon.split(';')))
for keys,values in dictionary_of_line.items():
print("{0} {1}".format(keys,values))
但是我在该行的 score 元素上遇到错误:
ValueError: too many values to unpack (expected 2)
我可以将 '=' 上的拆分调整为此,所以它会在第一个 '=' 之后停止
dictionary_of_line = dict((k.strip(), v.strip()) for k,v in (item.split('=',1)
for item in split_line_by_semicolon.split(';')))
for keys,values in dictionary_of_line.items():
print("{0} {1}".format(keys,values))
但是我丢失了大括号内的子值。有人知道我如何实现这个多层字典吗?
【问题讨论】:
-
split_line_by_semicolon.split(';')在我看来不合适。split_line_by_semicolon是一个列表,而列表没有split方法。您确定这正是您正在运行的代码吗? -
正确。我解析了一行中的其他一些内容以深入了解它。所以它实际上是 split_line_by_semicolon[3]
标签: python dictionary split key-value