求教怎么能比较优雅的实现这个功能

2019-04-29 18:50:05 +08:00
 warcraft1236

有一段 json,格式大概是这样的

"data":[
    {
        "file": "https://fvs.io/re.........",
        "label": "480p",
        "type": "mp4"
    },
    {
        "file": "https://fvs.io/redirector.......",
        "label": "720p",
        "type": "mp4"
    }
]

我想取出来 label 中清晰度最高的

5538 次点击
所在节点    Python
37 条回复
ErnieSauce
2019-04-29 18:57:35 +08:00
我一般使用 json 转数组,然后提取
ErnieSauce
2019-04-29 18:58:56 +08:00
@ErnieSauce 刚看到是在 python 区,这个不太清楚,应该也有类似的吧
hmxxmh
2019-04-29 19:15:42 +08:00
遍历取出字段 label 的值和对应的索引,比较大小留下大的索引,然后通过索引去取字典😂
entertainyou
2019-04-29 19:32:16 +08:00
max(list, key=lambda x: x['label']) // 需要根据需求修改 key 函数.
Leigg
2019-04-29 21:28:40 +08:00
@hmxxmh 遍历的时候就已经得到结果了,兄弟
warcraft1236
2019-04-29 21:53:29 +08:00
@Leigg 遍历的时候得不到吧,毕竟不知道后边是不是还有更大的值
zzxCNCZ
2019-04-29 21:55:46 +08:00
遍历一遍就能去取到最大的啦
luguhu
2019-04-29 22:09:34 +08:00
如果是 python sorted 可以自定义排序吧
Northxw
2019-04-29 22:23:27 +08:00
首先,这种 Json 格式一般来说是固定且有序的(不排除某些奇葩站点,不过我没遇见过),获取 -1 索引位置的就好;
然后,如果接口每次返回随机个数的 label,但是固定顺序的,len(data) 后获取 [-1] 个就好;
最后,如果随机个数且无序,建议用正则;第一次匹配数字,确定最大的,第二次在第一期确定基础之上,非贪婪正则匹配最近的 label。
zzz686970
2019-04-29 22:47:54 +08:00
@entertainyou 如果还有 1080p 那岂不是拿不到么?
linweibin
2019-04-29 23:06:56 +08:00
不知道楼主要什么语言,思路:冒泡排序取
zqx
2019-04-29 23:28:04 +08:00
js:
arr.sort((a,b)=>{
return Number(a.label)-Number(b.label)
})[0]
hundan
2019-04-29 23:36:18 +08:00
一边遍历一边按标签重新分组 然后最后操作不同分组
LancerComet
2019-04-29 23:37:07 +08:00
[
{
"file": "https://fvs.io/re.........",
"label": "480p",
"type": "mp4"
},
{
"file": "https://fvs.io/redirector.......",
"label": "720p",
"type": "mp4"
},
{
"file": "https://fvs.io/redirector.......",
"label": "240p",
"type": "mp4"
},
{
"file": "https://fvs.io/redirector.......",
"label": "1080p",
"type": "mp4"
},
].reduce((prev, value) => parseInt(value.label) > parseInt(prev.label) ? value : prev)
icy37785
2019-04-30 00:44:50 +08:00
遍历一遍呀。
prolic
2019-04-30 01:15:46 +08:00
print(reduce(lambda x,y: x if x['label'] > y['label'] else y,json.loads(str).get('data')))
懒得格式化了,凑合看吧
vHypnos
2019-04-30 02:59:19 +08:00
sort 排序 ( by lable ) 然后返回最后一个 ( or 第一个)
Trim21
2019-04-30 03:14:27 +08:00
max(o['data'], key=lambda x:int(x['label'][:-1]))
aliao0019
2019-04-30 03:23:33 +08:00
遍历啊,为什么要去排序
hmxxmh
2019-04-30 08:00:53 +08:00
@linweibin 我也觉得有点类似冒泡排序😂

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

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

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

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

© 2021 V2EX