Теперь у меня есть Dict объект, чей ключ такого рода:как найти строку формата {ключ: формат} в строке, в питоне
d ={}
d['fruit'] = 'apple' # user input from a configuration file
d['availablefruit'] = 'orange' # generated by the program
Я хочу, чтобы пользователь может установить d['fruit']='{availablefruit:s}'
в для того чтобы использовать программу генерируемой значение orange
, с помощью nestget
функции, а именно:
d['fruit'] = '{availablefruit:s}' # from user input
print d.nestget('fruit', None) # return orange is applicable
причиной для этого является достижение некоторой функции «автозаполнения», то есть, пользователь может либо получить предварительно -знаковое значение (например, apple
) для 'фруктов 'или используйте созданное машиной значение от ключа availablefruit
, не зная, какой фрукт доступен к моменту выхода функции nestget
.
Вот проблема: есть хорошая функция getformatstringkeys
таким образом, что она возвращает availablefruit
, которые встраиваются в строке {availablefruit:s}
, так что я могу выполнить format
метод строки?
def nestget(key, default):
val = d.get(key, default)
keys_in_val = getformatstringkeys(val)
return val.format(**{k:d[k] for k in keys_in_val})
, как я могу проверить, следующий
'{a:f},{b:f},{c:f}'.format(a=1,b=2,c=3,d=4,e=5)
'1,2,3'
дает, так что он должен работать, если я прохожу в целом Dict d
к format
использовать val.format (** г). Но это может быть намного дороже, когда дикт намного больше.
==== ==== редактировать
спасибо user2357112 - то, что вы говорите правильно. Я так не думал. на самом деле то, что format
сделать, - это поиск ключей, упомянутых здесь, и вызов dict.get()
и замена при подаче kwargs. Как ярко я должен был выполнить действие по параметрам, чтобы вызвать функцию, а действие уже реализовано самой функцией ....
Это довольно запутанным вопрос, в основном потому, что вы сделали плохую работу именования переменных. –
Зачем вам это нужно в форме строки формата? Что не так, просто имея значение, предоставленное пользователем, '' key2''? – user2357112
Почему это было бы дороже, если бы диктофон был больше? 'str.format' не нужно читать весь dict. Он просто использует части, упомянутые в строке формата. – user2357112