创建一个智能函数来从字典列表中提取值

荣耀9211

我有一个这样的数据列表

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 字典。

我的方法

我使用此代码作为 name = '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)
马蒂诺

我认为这(现在)做你想要的:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从与一个字典中的键关联的列表中提取值以创建另一个字典

从字典列表中提取值基于python3中的另一个值

创建一个函数来按特定值对字典列表进行排序

从 R 中的列表中提取值:Arima 函数的一个案例

如何从字典列表中获取值为此创建一个函数

从字典列表的组合中提取一个值

从字典列表中提取值

如何定义一个函数来创建列表

如何从字典中提取值并从中创建列表

使用另一个列表中的索引从列表中提取值

从字典中提取数据,里面有一个列表(里面有更多的字典)

从字典列表中提取一个字典(Python)

从两个列表中提取一个共同元素,并通过避免重复创建一个字典,从一个列表映射到另一个列表

根据列表从另一个工作表上的单元格中提取值

创建一个使用键值对的字符串,并通过键从中提取值

如何从字典列表中提取值

从列表中的字典中提取值

如何创建一个函数来提取向量内字符串中的字段?

函数根据另一个数组的值从一个数组中提取值

从字典中提取值

如何创建一个类似于“ Data.Vector.modify”的函数来接收列表?

如何创建一个Javacript函数来读取下拉列表以显示单选按钮?

创建一个函数来迭代R中大列表中的小标题元素

创建一个函数来循环遍历具有日期的元组列表

从列表中提取值并创建元组

使用函数从词典列表中提取值

使用Kotlin从另一个列表中提取的字符串创建列表

从列表中提取标题,并创建一个与标题并排放置到列表元素的DataFrame

如何创建从另一个对象列表中提取数据的列表