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
![]() | 1 NaVient 2018-08-07 11:30:54 +08:00 dict.keys() |
3 wsds OP |
![]() | 4 Tyanboot PRO len(b["data"]) 了解下 可以直接 for i in b["data"]: id_ = i["id"] |
![]() | 5 mkeith 2018-08-07 11:36:48 +08:00 [item["id"] for item in b["data"] ] |
![]() | 6 ik 2018-08-07 11:37:01 +08:00 ``` >>> for i in b['data']: ... print(i['id']) ... 1 2 3 ``` 这样有什么问题吗? 另外`"total"`是不是对应 id 的数量? |
![]() | 7 noqwerty 2018-08-07 11:37:05 +08:00 via Android len(b['data']) |
8 wsds OP |
![]() | 9 masha 2018-08-07 11:39:31 +08:00 for dd in b['data']: print(dd.get('id')) |
![]() | 10 qiayue PRO data 里边不是数组吗?难道 python 不能对数据做循环? |
![]() | 13 jeremaihloo 2018-08-07 11:48:17 +08:00 @wsds #12 你数据都有了,直接用 len()函数,为啥会不知道有多少个 ID |
![]() | 14 qiayue PRO 数组都给你了,怎么可能会不知道数组长度 |
![]() | 15 blodside 2018-08-07 12:28:13 +08:00 一个 map 就行了啊 map(lambda x: x['id'], b['data']) |
16 wsds OP |
![]() | 18 bravecarrot 2018-08-07 14:28:04 +08:00 @wsds map reduce filter zip enumerate lambda sort collections 这些关键字 /函数 /库 在处理这类问题时很有用 可以看下 |
19 wsds OP @bravecarrot 多谢提醒,我学习一下 |
20 fjun3333 2018-08-07 15:12:26 +08:00 列表推导式? id_lst = [item['id'] for item in b['data']] |
21 WO31400 2018-08-07 15:37:26 +08:00 使用 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 2018-08-07 16:55:16 +08:00 明显爬虫入门选手 哈哈 有个官方的 json dumps 里面有个自造的转换函数的参数,留下有用的 去掉没用的 |
![]() | 23 wlsnx 2018-08-07 18:00:34 +08:00 [x["id"] for x in b["data"]] |