如何将字符串转换为字典以从中检索一个值?

时间:2018-10-30 11:51:05

标签: python-2.7 dictionary

我的一个函数返回了在函数'def convert_st(self)'中声明的字符串'sumstr':

def covert_st(self):
    sumstr= 'Email: testmail@gmail.com ,Status: Connected, Logstate: On'
    dd ={}
    for st in sumstr:
        key,value=st.split(',')
        dd[key] = value
    print dd
    print dd['Email']

我正在尝试将字符串'sumstr'转换为字典并读取'Email'的值。 但是我收到错误消息:“在covert_st ValueError中:需要多个值才能解压缩”

3 个答案:

答案 0 :(得分:1)

您试图将3个值分配给2个值,这就是问题所在,首先,您需要先按分割,然后按:分割,以首先分隔键,最后分隔键值。

def covert_st():
    sumstr= 'Email: testmail@gmail.com ,Status: Connected, Logstate: On'
    sumstr = sumstr.split(',')
    dd ={}
    for st in sumstr:
        key,value=st.split(':')
        dd[key] = value
    print dd
    print dd['Email']

答案 1 :(得分:0)

您可以执行以下操作:

foo = 'Email: testmail@gmail.com ,Status: Connected, Logstate: On'
bar = dict(item.strip().split(': ') for item in foo.split(','))
print(bar['Email'])

请注意,您的字符串的逗号前后不一致,例如,,。这就是为什么您还需要使用strip()的原因。如果它们一致,则可以相应地分割foo字符串。

答案 2 :(得分:0)

如果sumstr可以是json,那么您可以像这样轻松地对其进行解析:

import json
sumstr= '{Email: testmail@gmail.com ,Status: Connected, Logstate: On}'
data = json.loads(sumstr)
email = data["Email"]

如果sumstr无法采用json格式,则可以这样解析:

sumstr= 'Email: testmail@gmail.com ,Status: Connected, Logstate: On'
elements = sumstr.split(",")
email = elements[0].split(":")[1].strip()