Уведомления

Группа в Telegram: @pythonsu

#1 Июль 8, 2019 07:51:15

habrman
Зарегистрирован: 2019-07-01
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

replace dict

как заставить такой код работать

 replace=({'old':'v1', 'new':'v2'})
s='v1'
print(s.replace(random.choice(replace)))
про вариант с переменной и написанием своей ф-ции я в курсе
d=random.choice(replace)

Отредактировано habrman (Июль 8, 2019 07:51:33)

Офлайн

#2 Июль 8, 2019 08:46:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

replace dict

habrman
Вы бы сказали, чего вы хотите получить, вам бы ответили, как это лучше сделать



Офлайн

#3 Июль 8, 2019 09:27:33

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

replace dict

habrman
как заставить такой код работать
никак:
1. random.choice принимает в качестве аргумента последовательность вы же ему скармливаете словарь.
то что вы словарь завернули в кгуглые скобки, вовсе не делает его кортежем.
2. метод replace должен иметь минимум 2 аргумента
 str.replace(old, new[, max])
у вас же аргумент один.
Отсюда вывод единственный способ заставить такой код заработать , написать свой собственный пайтон с шариатом и гуриями, иначе никак.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июль 8, 2019 09:30:26)

Офлайн

#4 Июль 8, 2019 09:53:38

habrman
Зарегистрирован: 2019-07-01
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

replace dict

будет список замен

 replace=({'old':'v1', 'new':'v2'},{'old':'v1', 'new':'v2'},{'old':'v1', 'new':'v2'})
хочу рандомно брать 1 элемент словарь и делать замену в строке

Офлайн

#5 Июль 8, 2019 09:59:19

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

replace dict

habrman
хочу рандомно брать 1 элемент словарь и делать замену в строке
так чтоле?
 import random
replace=({'old':'v1', 'new':'v2'},{'old':'v1', 'new':'v3'},{'old':'v1', 'new':'v4'})
s='v1'
for i in range(5):
    random_dict=(random.choice(replace))
    print(s.replace(random_dict['old'],random_dict['new']))
>>> 
v2
v4
v3
v2
v3
>>>



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#6 Июль 8, 2019 10:40:07

habrman
Зарегистрирован: 2019-07-01
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

replace dict

да
но без строки random_dictrandom.choice(replace))
думал может replace умеет мапить словарь на параметры

Офлайн

#7 Июль 8, 2019 10:58:40

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

replace dict

 >>> import random
>>> s = "123456789"
>>> tab = [('1', 'a'), ('2','b'), ('3','c'), ('4', 'd'), ('5', 'e')]
>>> s.translate({ ord(x):y for x,y in [random.choice(tab)] })
'1b3456789'



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#8 Июль 8, 2019 11:18:01

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

replace dict

habrman
думал может replace умеет мапить словарь на параметры
тут собственно вопрос что вам таки конкретно надо?
просто словарь неупорядоченая структура(по крайней мере до версии 3.6) вы не можете просто передать методу replace список значений словаря values(), потому что неизвестно в каком порядке они будут возвращены.
вам нужно или переделать ваш словарь ,поскольку у вас словарь избыточен то можно например сделать так:
 import random
replace={'old':'v1', 'new':('v2', 'v3','v4')}
s='v1'
for i in range(5):
    print(s.replace(replace['old'],random.choice(replace['new'])))

или отказаться от словарей вообще, а использовать вложеные списки\кортежи:
 import random
replace=(('v1','v2'),('v1','v3'),('v1','v4'))
s='v1'
for i in range(5):
    print(s.replace(*random.choice(replace)))



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июль 8, 2019 11:25:11)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version