现在我有一个 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'
,所以如果我将整个字典传递d
给format
使用 val.format(**d),它应该可以工作。但是当字典更大时,它可能会更昂贵。
==== 编辑 ====
谢谢user2357112——你说的是对的。我没有这样想。实际上format
要做的是搜索那里提到的键,dict.get()
并在提供 kwargs 时调用并替换。我多么聪明地打算对参数执行操作以调用函数,而该操作已经由函数本身实现......