我有这样的数据列表
data = [
{
"name": "Box 0",
"type": "Box",
"vals": {
"corner1": "0,0,0",
"corner2": "0,0,5",
"rotate": "0",
"scale": "1",
"translate": "0,0,0"
}
},
{
"name": "Ovus 1",
"type": "Ovus",
"vals": {
"radiusb": "1",
"radiust": "0.5",
"rotate": "0",
"scale": "1",
"translate": "0,0,0"
}
}
]
我想创建一个表格功能
fetch_attributes(name, key)
我可以在其中提供关键属性值的类型,值或比例。
我的问题是scale属性在vals词典中。我可以做一个函数,使它在给我* key = type 时给我类型,而当我要求 key = scale *时,它会自动进入vals字典中。
我的方法
我使用此代码作为名称='Box 0'的示例
obj = [i for i in data if i['name'] == name][0]
key_1 = "['vals']" # If I want complete dict of vals
key_2 = "['vals']['scale']" #If I want only one val out of vals
key_3 = "['type']" # If I want type
result_1 = eval('obj' + key_1)
result_2 = eval('obj' + key_2)
result_3 = eval('obj' + key_3)
我想知道是否存在执行此任务的更好或更多的pythonic方法
编辑
我想要一种也可以帮助或指导创建edit_attributes函数的方法
edit_attributes(name, key, value)
问题来源:stackoverflow
我认为这(现在)可以满足您的需求:
def fetch_attributes(data, name, key):
for dct in data:
if dct['name'] == name:
obj = dct
break
else:
raise KeyError(f'No object with name {name!r} in data')
if isinstance(obj, dict):
if key in obj:
return obj[key]
for value in obj.values():
if isinstance(value, dict): # Nested dict?
if key in value:
return value[key]
raise KeyError(f'{key!r} not in data')
print(fetch_attributes(data, 'Box 0', 'vals')) # -> {'corner1': '0,0,0', 'corner2': '0,0,5', 'rotate': '0', 'scale': '1', 'translate': '0,0,0'}
print(fetch_attributes(data, 'Box 0', 'scale')) # -> 1
print(fetch_attributes(data, 'Box 0', 'type')) # -> Box
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。