Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 24, 2011 00:22:32

wghost
От:
Зарегистрирован: 2011-09-02
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста с преобразованием строк

sp3
dict(c.split('=',1) for c in a.split())
Аналогичный результат, или я неправильно применил…



Офлайн

#2 Дек. 24, 2011 03:34:33

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9747
Репутация: +  843  -
Профиль   Отправить e-mail  

Помогите пожалуйста с преобразованием строк

2.6

>>> s = 'key1=value1\nkey2=value2'         
>>> d = dict(p.split('=', 1) for p in s.splitlines())
>>> d
{'key2': 'value2', 'key1': 'value1'}
>>>



Офлайн

#3 Дек. 24, 2011 13:46:12

wghost
От:
Зарегистрирован: 2011-09-02
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста с преобразованием строк

py.user.next
2.6
>>> s = 'key1=value1\nkey2=value2'         
>>> d = dict(p.split('=', 1) for p in s.splitlines())
>>> d
{'key2': 'value2', 'key1': 'value1'}
>>>
В общем я не знаю, результат получается всегда один:
{'key1': 'value1'}
{'key2': 'value2'}
Попробую подробней расписать что происходит.
Данные собираются регуляркой в “a”.
print a
('nenugno1', 'key1=value1', 'nenugno12')
('nenugno2', 'key2=value2', 'nenugno2')
Необходимы только значения ‘key=value’
print a[1]
key1=value1
key2=value2
И 'a' нужнно преобразовать в строку:
{'key1': 'value1', 'key2': 'value2'}
a фактически массив…, но питон рассматривает его как строку? Или я не прав…



Отредактировано (Дек. 24, 2011 13:51:33)

Офлайн

#4 Дек. 24, 2011 14:31:27

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Помогите пожалуйста с преобразованием строк

import libastral

print libastral.solve_problem()
Результат:

#!/usr/bin/env python
#-*- coding: utf8 -*-

import re

test = '''temp key1=value1 temp
temp key2=value2 temp
temp key3=value3 temp'''

rex = re.compile('(\w+) (\w+=\w+) (\w+)')

acc = list()

for ln in test.split('\n'):
m = rex.match(ln)
if m is not None:
acc.append(m.group(2))

res = dict([a.split('=', 1) for a in acc])

print res

Отредактировано (Дек. 25, 2011 07:08:27)

Офлайн

#5 Дек. 24, 2011 18:00:32

wghost
От:
Зарегистрирован: 2011-09-02
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста с преобразованием строк

import re
from grab import Grab

g = Grab()
#
g.go('http://python.net/')
#
rex = re.compile(r'(<meta name=".*?")(.*?)(/>)')
for data in rex.findall(g.response.body):
a = data[1]
d = dict(map(lambda x: x.split('=', 1), a.split()))
print d
Вывод:
{'content': '"SS3tlfjOjNLiOGzGlk9H9izd3XC/mf5PDQOTg4TDCE8="'}
{'content': '"index,follow"'}
{'content': '"en"'}
{'content': '"starship,python"'}
Traceback (most recent call last):
File "test.py", line 13, in <module>
d = dict(map(lambda x: x.split('=', 1), a.split()))
ValueError: dictionary update sequence element #1 has length 1; 2 is required
В данной ситуации еще не понятна причины ошибки, т.к. в ‘print a’ вроде все нормально:
 content="SS3tlfjOjNLiOGzGlk9H9izd3XC/mf5PDQOTg4TDCE8="
content="index,follow"
content="en"
content="starship,python"
content="The home of pythonistas"
content="various"



Отредактировано (Дек. 24, 2011 18:03:15)

Офлайн

#6 Дек. 24, 2011 19:25:54

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Помогите пожалуйста с преобразованием строк

Вы делаете print внутри цикла - и конечно же у вас ‘все нормально’ решения которые вам предлагались, предполагали, что в ‘a’ находится цельная строка.
Как вариант - ‘накапливать’ данные из ‘a’ в отдельной коллекции (см. мой предъидущий пост) и уже эту конечную коллекцию и обрабатывать.
Иначе у вас не получится общий словарь - только список словарей. Их можно ‘склеить’, но мне кажется, что вариант с промежуточным хранением удобнее.

Отредактировано (Дек. 24, 2011 19:26:29)

Офлайн

#7 Дек. 25, 2011 01:42:34

wghost
От:
Зарегистрирован: 2011-09-02
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста с преобразованием строк

Не очень понимаю как работает вариант с ‘накоплением’ данных в отдельную коллекцию…
Не удается найти внятного объяснеия на русском на счет ‘_sre.SRE_Match object at ’. И там ‘name ’acc' is not defined'.
А можно вариант со склейкой?
п.с. с ‘append()’ не должно работать вроде… ‘m.group(2)’ - полностью список а не отдельная строка…
Т.е. нужно каждую новую строку ‘key=value’ добавлять в конец списка, пока они существуют.



Отредактировано (Дек. 25, 2011 01:55:14)

Офлайн

#8 Дек. 25, 2011 06:34:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9747
Репутация: +  843  -
Профиль   Отправить e-mail  

Помогите пожалуйста с преобразованием строк

wghost
В общем я не знаю, результат получается всегда один:
Попробую подробней расписать что происходит.
Данные собираются регуляркой в “a”.
это не очень похоже на описание в первом сообщении

2.6
>>> a = [('nenugno1', 'key1=value1', 'nenugno12'),
... ('nenugno2', 'key2=value2', 'nenugno2')]
>>>
>>> d = dict(t[1].split('=', 1) for t in a)
>>> print d
{'key2': 'value2', 'key1': 'value1'}
>>>



Отредактировано (Дек. 25, 2011 06:36:44)

Офлайн

#9 Дек. 25, 2011 07:10:52

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Помогите пожалуйста с преобразованием строк

wghost
Не очень понимаю как работает вариант с ‘накоплением’ данных в отдельную коллекцию…
Для вашего случая:
acc = [d[1] for d in rex.findall(g.response.body)]
res = dict([a.split('=', 1) for a in acc])
print res

Офлайн

#10 Дек. 25, 2011 17:13:37

wghost
От:
Зарегистрирован: 2011-09-02
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста с преобразованием строк

Спасибо, так заработало.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version