首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中配置一个yaml文件中的多个字典键?

如何在Python中配置一个yaml文件中的多个字典键?
EN

Stack Overflow用户
提问于 2018-08-10 23:39:30
回答 1查看 2K关注 0票数 0

我正在尝试使用yaml文件来存储字典键,这样我就可以解析各种json有效负载。

我将以下yaml文件加载到名为‘cfg’的变量中:

代码语言:javascript
复制
my_table: metadata

当我运行时:

代码语言:javascript
复制
for i in json['resources']:
    print(i[cfg['my_table']])

我可以很好地看到我的json的“metadata”键中的所有值。

但是,我希望看到存在于‘’下的资源‘metadata’资源键的所有值。因此,当我将yaml文件更改为:

代码语言:javascript
复制
my_table: metadata, guid

它不起作用。我也尝试过这些变体:

代码语言:javascript
复制
my_table: ['metadata', 'guid']  #tried ''.join("['{0}']".format(a) for a in cfg['my_table']) which gives me what I want, but when I shove this inside i[], I get a key error
my_table: ['metadata']['guid']  #yaml file doesn't parse properly

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-10 23:57:47

因此,您希望将字典键存储在yaml文件中?

只管去做

代码语言:javascript
复制
# keys.yaml
my_table: [metadata, guid]

然后在您的python文件中

代码语言:javascript
复制
keys = yaml.safe_load('keys.yaml')['my_table']

for obj in json['resources']:  # don't call it json, that's a package name
    print(obj[keys[0]][keys[1]])

对于可变数量的键(不只是两个),如下所示:

代码语言:javascript
复制
def recursive_getitem(obj, keys):
   if len(keys) == 0:
      return obj
   return recursive_getitem(obj[keys[0]], keys[1:])

然后做

代码语言:javascript
复制
for obj in json['resources']:  
    print(recursive_getitem(obj, keys))

要回答注释中的第二个问题,您需要使用嵌套列表

代码语言:javascript
复制
# keys.yaml
my_table:
    - [metadata, guid]
    - [entity, name]

代码语言:javascript
复制
# py file
keys = yaml.safe_load('keys.yaml')['my_table']

for obj in json['resources']:  # don't call it json, that's a package name
    print(obj[keys[0][0]][keys[0][1]])
    print(obj[keys[1][0]][keys[1][1]])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51789905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档