Python中如何优雅地实现这个功能?
有一段 json,格式大概是这样的
"data":[
{
"file": "https://fvs.io/re.........",
"label": "480p",
"type": "mp4"
},
{
"file": "https://fvs.io/redirector.......",
"label": "720p",
"type": "mp4"
}
]
我想取出来 label 中清晰度最高的
Python中如何优雅地实现这个功能?
我一般使用 json 转数组,然后提取
刚看到是在 python 区,这个不太清楚,应该也有类似的吧
遍历取出字段 label 的值和对应的索引,比较大小留下大的索引,然后通过索引去取字典😂
max(list, key=lambda x: x[‘label’]) // 需要根据需求修改 key 函数.
遍历的时候就已经得到结果了,兄弟
遍历的时候得不到吧,毕竟不知道后边是不是还有更大的值
遍历一遍就能去取到最大的啦
如果是 python sorted 可以自定义排序吧
首先,这种 Json 格式一般来说是固定且有序的(不排除某些奇葩站点,不过我没遇见过),获取 -1 索引位置的就好;
然后,如果接口每次返回随机个数的 label,但是固定顺序的,len(data) 后获取 [-1] 个就好;
最后,如果随机个数且无序,建议用正则;第一次匹配数字,确定最大的,第二次在第一期确定基础之上,非贪婪正则匹配最近的 label。
如果还有 1080p 那岂不是拿不到么?
不知道楼主要什么语言,思路:冒泡排序取
js:
arr.sort((a,b)=>{
return Number(a.label)-Number(b.label)
})[0]
一边遍历一边按标签重新分组 然后最后操作不同分组
[
{
“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)
遍历一遍呀。
print(reduce(lambda x,y: x if x[‘label’] > y[‘label’] else y,json.loads(str).get(‘data’)))
懒得格式化了,凑合看吧
sort 排序 ( by lable ) 然后返回最后一个 ( or 第一个)
max(o[‘data’], key=lambda x:int(x[‘label’][:-1]))
遍历啊,为什么要去排序
js:
Math.max(arr.map((item)=>{return item.label}))
啥排序啊,就取个最大值而已
maxResolution := 0
for _, d := range data {
if maxResolution < parseXXX(d.Label) {
maxResolution = parseXXX(d.Label)
}
}
return maxResolution
go<br>func main() {<br>maxResolution := 0<br><br>for _, d := range data {<br>if maxResolution < parseXXX(d.Label) {<br>maxResolution = parseXXX(d.Label)<br>}<br>}<br><br>print(maxResolution)<br>}<br><br>
遍历一边就能拿到手非常简单
遍历
取每个 label,转数字,比较大小;如果大的这个对象就暂存
一遍下来就能拿到暂存的最大的对象了。
你们都忽略了 在比较的时候 1080P < 480P 的问题…
data = [
{
“file”: “https://fvs.io/re…”,
“label”: “480p”,
“type”: “mp4”
},
{
“file”: “https://fvs.io/redirector…”,
“label”: “1020p”,
“type”: “mp4”
},
{
“file”: “https://fvs.io/redirector…”,
“label”: “720p”,
“type”: “mp4”
}
]
data.sort(key=lambda d:int(d[‘label’][:-1]), reverse=True)
print(data[0])
sorted(a, key=lambda x:int(x[‘label’][:-1]), reverse=True)
第一个就是
max(json.dumps(d)[‘data’], key=lambda x: int(x[‘label’][:-1]))
手机上打的,疏忽了。parseInt 可以将字符串中数字部分提取出来,而 Number 只能构造数值,最后应该用…展开数组给 max 函数
用 js 的 ramda 库:
R.last(R.sortBy(R.prop(‘label’), data))
1.
max(data, key=lambda x: int(x[‘label’].replace(‘p’,’’)))
2.
data.sort(key=lambda x:int(x[‘label’].replace(‘p’,’’)))
data[-1]
补充:
from collections import OrderedDict
c = list(map(lambda x:OrderedDict(x),a))[-1]
# OrderedDict 实现一个 FIFO 得 dict
能用 SQL 过滤最好,不能用就遍历再对比

