首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
华为云
V2EX  ›  Python

这种字典,在不知道有多少个 value 的情况下,怎么取到其值?

  •  
  •   wsds · 10 天前 · 1442 次点击
    b = {
        "data": [{
            "id": "1"
        }, {
            "id": "2"
        }, {
            "id": "3"
        }],
          #这里有 N 个 id,且 N 是个不确定的值
        "total": 0
    }
    	
    

    我想到的是 try 的形式,但感觉这是个很 low 的方法,有没有比较官方的,便捷的办法取到 id 的?求万能的 v 友推荐一下

    num = -1
    while(True):
    	num += 1
    	try:
    		id=b["data"][num]["id"]
    		print(id)
    	except IndexError:
    		break
    
    23 回复  |  直到 2018-08-07 18:00:34 +08:00
        1
    NaVient   10 天前
    dict.keys()
        2
    wsds   10 天前
    @NaVient 这个输出是
    dict_keys(['data', 'total'])
        3
    wsds   10 天前
    @NaVient dict.values()输出了
    dict_values([[{'id': '1'}, {'id': '2'}, {'id': '3'}], 0])
    但这个类型好奇怪,怎么再拿到 id
        4
    Tyanboot   10 天前 via Android
    len(b["data"]) 了解下

    可以直接

    for i in b["data"]:
    id_ = i["id"]
        5
    mkeith   10 天前
    [item["id"] for item in b["data"] ]
        6
    ik   10 天前
    ```
    >>> for i in b['data']:
    ... print(i['id'])
    ...
    1
    2
    3
    ```
    这样有什么问题吗? 另外`"total"`是不是对应 id 的数量?
        7
    noqwerty   10 天前 via Android
    len(b['data'])
        8
    wsds   10 天前
    @Tyanboot @ik,多谢
    不错,学习了,确实可以

    ```python
    b = {
    "data": [{
    "id": "1"
    }, {
    "id": "2"
    }, {
    "id": "3"
    }],
    "total": 0
    }

    for i in b["data"]:
    print(i["id"])
    ```
        9
    masha   10 天前
    for dd in b['data']:
    print(dd.get('id'))
        10
    qiayue   10 天前
    data 里边不是数组吗?难道 python 不能对数据做循环?
        11
    wsds   10 天前
    @mkeith 好强,列表生成器,感谢啊
        12
    wsds   10 天前
    @qiayue 问题是 id 不知道有多少个,不知道 len
        13
    jeremaihloo   10 天前
    @wsds #12 你数据都有了,直接用 len()函数,为啥会不知道有多少个 ID
        14
    qiayue   10 天前
    数组都给你了,怎么可能会不知道数组长度
        15
    blodside   10 天前
    一个 map 就行了啊

    map(lambda x: x['id'], b['data'])
        16
    wsds   10 天前
    @qiayue
    @jeremaihloo 哦哦,对对,搞懵逼了,现在明白了,谢谢
        17
    wsds   10 天前
    @blodside 多谢,lambda 这个函数很少使用,学习了
        18
    bravecarrot   10 天前
    @wsds map reduce filter zip enumerate lambda sort collections 这些关键字 /函数 /库 在处理这类问题时很有用 可以看下
        19
    wsds   10 天前
    @bravecarrot 多谢提醒,我学习一下
        20
    fjun3333   10 天前
    列表推导式?
    id_lst = [item['id'] for item in b['data']]
        21
    WO31400   10 天前
    使用 jsonpath

    import jsonpath
    b = {
    "data": [{
    "id": "1"
    }, {
    "id": "2"
    }, {
    "id": "3"
    }],
    # 这里有 N 个 id,且 N 是个不确定的值
    "total": 0
    }
    data = jsonpath.jsonpath(b,"$..id")
    print(data)

    data = ['1', '2', '3']
        22
    PulpFunction   10 天前
    明显爬虫入门选手 哈哈 有个官方的 json dumps 里面有个自造的转换函数的参数,留下有用的 去掉没用的
        23
    wlsnx   10 天前
    [x["id"] for x in b["data"]]
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   实用小工具   ·   1881 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 20ms · UTC 02:47 · PVG 10:47 · LAX 19:47 · JFK 22:47
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1