我在Python中有一个JSON/dictionary对象,如下所示:

object = {"participants":
    [
        {"name": "Tyler", "role": "CEO"},
        {"name": "Robin", "role": "analyst"}
        {"name": "James", "role": "manager"}
    ]
}

给定一个人的名字,我如何访问他们的角色?由于角色不是名称的"子信息",因此您不能只执行以下操作:

object['participants']['Tyler']['role']

或者别的什么.你也不知道特定人的索引(如果这是唯一的解决方案,我假设你会做一个循环来找到它),所以你不能只是这样做

object['participants'][0]['role']

或者,仅仅因为泰勒恰好在指数0.

推荐答案

我会用这样的东西:

def jobs_where_name_is(json_object, name):
    return {entry["role"] for entry in filter(lambda entry: entry["name"] == name, json_object["participants"])}

请注意,可能有多个同名的人,这就是为什么返回一组作业(job)而不仅仅是一个作业(job)的原因.可能有多个同名的人在同一份工作中工作,这就是为什么我使用花括号(set)而不是方括号(list).注意,object在python中是一个关键字,因此不建议将其用作变量名.

顺便说一句,如果您使用的是一个非常大的数据库,我建议您可以查看pymongo库.这可以大大提高性能,因为您可以在本地使用mongodb查询.

Python相关问答推荐

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

未删除映射表的行

海运图:调整行和列标签

使可滚动框架在tkinter环境中看起来自然

Pandas:将多级列名改为一级

如何从数据库上传数据到html?

导入...从...混乱

在ubuntu上安装dlib时出错

改进大型数据集的框架性能

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

如何使用Azure Function将xlsb转换为xlsx?

如何在Airflow执行日期中保留日期并将时间转换为00:00

为什么我只用exec()函数运行了一次文件,而Python却运行了两次?

极点:在固定点扩展窗口

是否将Pandas 数据帧标题/标题以纯文本格式转换为字符串输出?

Scipy.linprog的可行性有问题吗?(A_ub@x0<;=b_ub).all()为True-但是-linprog(np.zeros_like(X0),A_ub=A_ub,b_ub=b_ub)不可行

合并Pandas中的数据帧,但处理不存在的列

使用元组扩展字典的产品挑战

如何有效地计算所有输出相对于参数的梯度?