Как преобразовать строку в словарь, чтобы извлечь из нее одно значение? - PullRequest
0 голосов
/ 30 октября 2018

Одна из моих функций возвращает строку 'sumstr', как объявлено ниже в функции 'def convert_st (self)':

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: для распаковки нужно более 1 значения"

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Вы можете сделать что-то вроде этого:

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

Обратите внимание, что в вашей строке запутанные строки, например , и ,. Вот почему вам нужно использовать также strip (). Если они совпадают, вы можете соответственно разделить строку foo.

0 голосов
/ 30 октября 2018

Если 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()
0 голосов
/ 30 октября 2018

Вы пытались присвоить 3 значения двум значениям, в этом была проблема. Сначала нужно разделить, а затем: разделить сначала ключи и, наконец, значения ключей.

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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...