如何在 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]])
我正在尝试使用 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]])