これで、キーが次のような 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全体を渡してval.format(**d)dを使用するとうまくいくはずです。formatしかし、口述がはるかに大きい場合、それははるかに高価になる可能性があります。
==== 編集 ====
user2357112 に感謝します -- あなたの言っていることは正しいです。私はこのように考えていませんでした。実際にformat行うことは、そこに記載されているキーを検索し、dict.get()kwargs がフィードのときに呼び出して置き換えることです。関数を呼び出すためにパラメーターに対してアクションを実行するつもりだったのに、そのアクションは関数自体によって既に実装されています....