如何将多行字符串解析为python dict?

时间:2014-12-07 00:57:47

标签: python dictionary

我通过在Python中尝试收集传感器读数来开始我的第一个编程项目。

我已经设法将“ipmitool传感器列表”的输出作为字符串存储到变量中。 我想在商店前面的那两个字符串中查看字符串中的关键字值。

print myvariable的输出看起来像这样:

CPU Temp         | 26.000     | degrees C  | ok         
System Temp      | 23.000     | degrees C  | ok     
Peripheral Temp  | 30.000     | degrees C  | ok    
PCH Temp         | 42.000     | degrees C  | ok    

我希望字典看起来像{'CPU Temp': 26.000, 'System Temp': 23.000}

3 个答案:

答案 0 :(得分:2)

你可以这样做:

a_string ="""CPU Temp        | 26.000     | degrees C  | ok
            System Temp      | 23.000     | degrees C  | ok
            Peripheral Temp  | 30.000     | degrees C  | ok
            PCH Temp         | 42.000     | degrees C  | ok"""



a_dict  = {key.strip():float(temp.strip()) for key, temp, *rest in map(lambda v: v.split('|'), a_string.splitlines())}

print(a_dict)

给出:

{'Peripheral Temp': 30.0, 'System Temp': 23.0, 'CPU Temp': 26.0, 'PCH Temp': 42.0}

对于python 2:

a_dict  = {v[0].strip():float(v[1].strip()) for v in map(lambda v: v.split('|'), a_string.splitlines())}

答案 1 :(得分:0)

如果没有转义,请从[line.split("|") for line in data.splitlines()]开始。

如果有棘手的字符和转义规则,您将要使用csv模块解析它:https://docs.python.org/2/library/csv.html

答案 2 :(得分:0)

import itertools

string_to_split = """CPU Temp         | 26.000     | degrees C  | ok

        System Temp      | 23.000     | degrees C  | ok

        Peripheral Temp  | 30.000     | degrees C  | ok

        PCH Temp         | 42.000     | degrees C  | ok"""

list_of_lines = string_to_split.split('\n')

list_of_strings = []

final_list = []

for index in range(0, len(list_of_lines)):

    try:
            final_list.append(list_of_lines[index].split('|')[0])
            final_list.append(list_of_lines[index].split('|')[1])
    except Exception, e:
            print e

dic_list = iter(final_list)

dic  = dict(zip(dic_list, dic_list))

print dic