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 2018-08-07 11:36:20 +08:00 via Android
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 2018-08-07 11:39:32 +08:00
data 里边不是数组吗?难道 python 不能对数据做循环?
|
13
jeremaihloo 2018-08-07 11:48:17 +08:00
@wsds #12 你数据都有了,直接用 len()函数,为啥会不知道有多少个 ID
|
14
qiayue 2018-08-07 11:50:30 +08:00
数组都给你了,怎么可能会不知道数组长度
|
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"]]
|