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

2018-08-07 11:22:47 +08:00
 wsds
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
3046 次点击
所在节点    Python
23 条回复
NaVient
2018-08-07 11:30:54 +08:00
dict.keys()
wsds
2018-08-07 11:34:13 +08:00
@NaVient 这个输出是
dict_keys(['data', 'total'])
wsds
2018-08-07 11:36:18 +08:00
@NaVient dict.values()输出了
dict_values([[{'id': '1'}, {'id': '2'}, {'id': '3'}], 0])
但这个类型好奇怪,怎么再拿到 id
Tyanboot
2018-08-07 11:36:20 +08:00
len(b["data"]) 了解下

可以直接

for i in b["data"]:
id_ = i["id"]
mkeith
2018-08-07 11:36:48 +08:00
[item["id"] for item in b["data"] ]
ik
2018-08-07 11:37:01 +08:00
```
>>> for i in b['data']:
... print(i['id'])
...
1
2
3
```
这样有什么问题吗? 另外`"total"`是不是对应 id 的数量?
noqwerty
2018-08-07 11:37:05 +08:00
len(b['data'])
wsds
2018-08-07 11:38:48 +08:00
@Tyanboot @ik,多谢
不错,学习了,确实可以

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

for i in b["data"]:
print(i["id"])
```
masha
2018-08-07 11:39:31 +08:00
for dd in b['data']:
print(dd.get('id'))
qiayue
2018-08-07 11:39:32 +08:00
data 里边不是数组吗?难道 python 不能对数据做循环?
wsds
2018-08-07 11:39:38 +08:00
@mkeith 好强,列表生成器,感谢啊
wsds
2018-08-07 11:41:21 +08:00
@qiayue 问题是 id 不知道有多少个,不知道 len
jeremaihloo
2018-08-07 11:48:17 +08:00
@wsds #12 你数据都有了,直接用 len()函数,为啥会不知道有多少个 ID
qiayue
2018-08-07 11:50:30 +08:00
数组都给你了,怎么可能会不知道数组长度
blodside
2018-08-07 12:28:13 +08:00
一个 map 就行了啊

map(lambda x: x['id'], b['data'])
wsds
2018-08-07 12:46:45 +08:00
@qiayue
@jeremaihloo 哦哦,对对,搞懵逼了,现在明白了,谢谢
wsds
2018-08-07 12:47:02 +08:00
@blodside 多谢,lambda 这个函数很少使用,学习了
bravecarrot
2018-08-07 14:28:04 +08:00
@wsds map reduce filter zip enumerate lambda sort collections 这些关键字 /函数 /库 在处理这类问题时很有用 可以看下
wsds
2018-08-07 15:04:13 +08:00
@bravecarrot 多谢提醒,我学习一下
fjun3333
2018-08-07 15:12:26 +08:00
列表推导式?
id_lst = [item['id'] for item in b['data']]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/477538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX