过滤python中的词典列表

时间:2014-07-25 22:20:59

标签: python list python-2.7 dictionary filter

所以,我需要构建一个基本上采用以下信息的过滤器......

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(或者我想要的任何东西。我瞄准一个函数,或者替代地,如果它存在的话,使用内置的东西更加python-y并且具有低于值的最高高度。

例如,我想构建一个类似于......的函数。

def getmestuff(listofdics, extrequired, heightmax):
    /*do the work*/
    return id;

例如,使用上述数据...

getmestuff(dictlist, 'mp4', 720)

将返回...馅饼

2 个答案:

答案 0 :(得分:5)

怎么样:

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,而第二个版本将返回具有最大高度的东西。

答案 1 :(得分: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