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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (556)

我试图使用yaml文件来存储字典键,以便我可以解析各种json有效负载。

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

my_table: metadata

当我运行:

for i in json['resources']:
    print(i[cfg['my_table']])

我可以从我的json ['metadata']键中看到所有值。

但是,我想看到['resources']下存在的['metadata'] ['guid']键的所有值。所以当我将我的yaml文件更改为:

my_table: metadata, guid

它不起作用。

我也试过下列代码:

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
提问于
用户回答回答于

所以你想在yaml文件中存储字典键?

# keys.yaml
my_table: [metadata, guid]

然后在python文件:

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]])

对于可变数量的键,请执行以下操作:

def recursive_getitem(obj, keys):
   if len(keys) == 0:
      return obj
   return recursive_getitem(obj[keys[0]], keys[1:])

然后:

for obj in json['resources']:  
    print(recursive_getitem(obj, keys))

要在注释中回答第二个问题,你需要使用嵌套列表:

# keys.yaml
my_table:
    - [metadata, guid]
    - [entity, name]
# 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]])

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动