簡體   English   中英

如何在Python的yaml文件中配置多個字典鍵?

[英]How do I configure multiple dictionary keys in a yaml file in Python?

我正在嘗試使用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]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM