Найти - Пользователи
Полная версия: replace dict
Начало » Python для новичков » replace dict
1
habrman
как заставить такой код работать
 replace=({'old':'v1', 'new':'v2'})
s='v1'
print(s.replace(random.choice(replace)))
про вариант с переменной и написанием своей ф-ции я в курсе
d=random.choice(replace)
FishHook
habrman
Вы бы сказали, чего вы хотите получить, вам бы ответили, как это лучше сделать
PEHDOM
habrman
как заставить такой код работать
никак:
1. random.choice принимает в качестве аргумента последовательность вы же ему скармливаете словарь.
то что вы словарь завернули в кгуглые скобки, вовсе не делает его кортежем.
2. метод replace должен иметь минимум 2 аргумента
 str.replace(old, new[, max])
у вас же аргумент один.
Отсюда вывод единственный способ заставить такой код заработать , написать свой собственный пайтон с шариатом и гуриями, иначе никак.
habrman
будет список замен
 replace=({'old':'v1', 'new':'v2'},{'old':'v1', 'new':'v2'},{'old':'v1', 'new':'v2'})
хочу рандомно брать 1 элемент словарь и делать замену в строке
PEHDOM
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
>>>
habrman
да
но без строки random_dictrandom.choice(replace))
думал может replace умеет мапить словарь на параметры
Rodegast
 >>> 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'
PEHDOM
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)))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB