Python 将信息从字符串转换为dict
我有这样一个字符串:Python 将信息从字符串转换为dict,python,python-3.x,dictionary,text,Python,Python 3.x,Dictionary,Text,我有这样一个字符串: COLUMN 1: A: 10.68 B: 11.82 C: 12.93 D: 50.2 C 2: Z: 68 S: 182 W:
COLUMN 1:
A: 10.68
B: 11.82
C: 12.93
D: 50.2
C 2:
Z: 68
S: 182
W: 13
E: 50
q = '''
COLUMN 1:
A: 10.68
B: 11.82
C: 12.93
d: 50.2
COLUMN 2:
Z: 68
S: 182
W: 13
E: 50
'''
result = {}
for line in q.split('\n'):
if line.strip() and not line[0].isspace():
col = line.strip()[:-1]
result[col] = {}
elif line.strip():
key, value = line.split(':')
result[col][key.strip()] = value.strip()
print result
在数据结构(如字典)中保存这些信息的好方法是什么
更新:问题是,在我的实际文本中,标题不一定以列开头,每个标题下的元素数量可能不同于其他标题。唯一不同的元素是,在每个标题下,元素缩进4个空格 您可以像这样创建嵌套dict:
COLUMN 1:
A: 10.68
B: 11.82
C: 12.93
D: 50.2
C 2:
Z: 68
S: 182
W: 13
E: 50
q = '''
COLUMN 1:
A: 10.68
B: 11.82
C: 12.93
d: 50.2
COLUMN 2:
Z: 68
S: 182
W: 13
E: 50
'''
result = {}
for line in q.split('\n'):
if line.strip() and not line[0].isspace():
col = line.strip()[:-1]
result[col] = {}
elif line.strip():
key, value = line.split(':')
result[col][key.strip()] = value.strip()
print result
结果:
{'COLUMN 2': {'S': '182', 'Z': '68', 'E': '50', 'W': '13'}, 'COLUMN 1': {'A': '10.68', 'C': '12.93', 'B': '11.82', 'd': '50.2'}}
或者,如果顺序很重要,您可以根据客户的回答,在列x
-中列出并按顺序追加项目
result, root = {}, None
for i in q.split('\n'):
if i.strip().endswith(':'):
root = i.strip()
result[root] = {}
elif i:
val = list(map(lambda x: x.strip(), i.split(':')))
result[root].update({val[0]: val[1]})
print(result)
遵守规则:
- 标题以
结尾:
- 项目分隔符是
:
- 没有空行
更改是,您可以将每个根键,
列X
存储在一个var中,并检查此根键上方的所有行,然后迭代并更新此键。类似于此,只需稍加调整:
res = {}
for row in data.split('\n'):
if row[:4] != ' ':
res[row.strip(':')] = sub = {}
else:
k,v = row.split(':')
sub[k.strip()] =v.strip()
print res
输出为:
{'C 2': {'S': '182', 'Z': '68', 'E': '50', 'W': '13'}, 'COLUMN 1': {'A': '10.68', 'C': '12.93', 'B': '11.82', 'D': '50.2'}}
如果顺序很重要,请改用顺序命令我不明白。你能给出一个你想要转换的字符串的具体例子吗?嵌套的dict可以像{1:{'a':10.68,'B':11.82},2:{'Z':68,'S':182}那样使用。像列[1]['A']一样访问它。@Tristan是的,这似乎是一个非常有用的结构。@Tristan你应该把它作为一个答案而不是一个注释。不是代码编写服务。请回顾并向我们展示您试图解决此问题的方法。我不希望算法依赖于关键字列,然后将其按
:
拆分,并检查值是否为”
——这将是您的列
,很抱歉我没有清楚解释。请查看更新的问题。如果您不喜欢上述拆分方法,请检查line.strip()和line[0].isspace()
key,value=line.split(“:”)value错误:没有足够的值来解包(预期为2,得到1)
请编辑您的答案以使其适用于Python3。此代码仅在Python2.x中有效。请参阅Vor答案下的最后一条评论。