将字典元素作为参数传递给函数

问题描述:

查看类似问题的一些答案,但未在函数/多条目词典中构建。假设我有一个包含不同地图投影的底图参数的字典;将字典元素作为参数传递给函数

Domains = {'TPCentral':["projection='geos',lon_0=-160,lat_0=0,resolution='l'"], 
'World':["projection='robin',lon_0=0"]} 

我想调用底图函数(从maplotlib),使得

m = Basemap(Domains['TPCentral']) 

所以,这将等效地充当;

m = Basemap(projection='geos',lon_0=-160,lat_0=0,resolution='l') 

问题是这个将它作为一个长字符串传递,不知道如何将它分解为单独的参数(尝试使用*)。提前致谢!

+0

看看[这个问题](https://*.com/questions/186857/splitting-a-semicolon-separated-str荷兰国际集团到一个词典功能于蟒)。 – tyteen4a03

+0

虽然我不想构建字典。 –

+0

这是怎么回事:[question](http://*.com/questions/36901/what-does-double-star-and-star-do-for-parameters) – RoaaGharra

["projection='geos',lon_0=-160,lat_0=0,resolution='l'"] 

是包含单个字符串的列表。使用它的解包会得到一个字符列表 - 这几乎肯定会比你的参数数量大得多,当然不是你想发送的参数。你最好使用字典保持这个值:

'TPCentral': { 
    'projection': 'geos', 
    'lon_0': -160, 
    'lat_0': 0, 
    'resolution': 'l'} 

,然后解压用关键字参数拆包:

m = Basemap(**Domains['TPCentral']) 

如果你被这种形式所迫,你可以做一个小的字符串处理,就像

pairs = [x.split('=') for x in Domains['TPCentral'][0].split(',')] 
Domains['TPCentral'] = {k: eval(v) for k, v in pairs} 
+0

这就是我正在寻找的,谢谢。我没有意识到字典可以包含子列表/字典,即dict = {'x':{'y':{'z':'a = 1'}}} –

+0

刚刚做过 - 不得不等待几分钟。 –