在Python中过滤字典列表
我需要创建一个过滤器,基本上是处理以下信息...
dictlist = [{'ext': 'mp4',
'height': 480,
'id', 'pies'},
{'ext': 'webm',
'height': 360,
'id', 'pies2'},
{'ext': 'mp4',
'height': 360,
'id', 'charles1'},
{'ext': 'mp4',
'height': 720,
'id', 'tucker'}]
(还有更多内容,但这里简化了)
然后输出一个元素的ID,这个元素必须是mp4格式(或者我想要的其他格式),并且它的高度在某个值以下,并且是最高的。
举个例子,我想建立一个类似于...
def getmestuff(listofdics, extrequired, heightmax):
/*do the work*/
return id;
所以,比如说使用上面的数据...
getmestuff(dictlist, 'mp4', 720)
会返回... pies
2 个回答
0
这是一个用来做相同事情的函数:
def get_me_stuff(dict_l, val, max_h):
best = 0
id = None
for d in dict_l:
h = d.get('height')
if d.get("ext") == val and max_h > h > best:
best = h
id = d.get("id")
return id
6
这样做怎么样:
mp4s = (d for d in dictlist if d['ext'] == 'mp4')
max(mp4s, key=lambda x: x['height'])
这个代码会返回一个叫“max”的字典——从这个字典中获取 id
就很简单了。(而且你可以把 mp4s
直接写在一行里,但为了让大家更清楚,我把它分成了两行。)
虽然读起来稍微复杂一点,但更简洁:
max(dictlist, key=lambda d: (d['ext'] == 'mp4', d['height']))
第一个版本会很贴心地在列表里没有 mp4 时抛出一个 ValueError
错误,而第二个版本在这种情况下只会返回高度最大的那个东西。