在元组列表中查找最小值和最大值

时间:2015-10-31 18:12:49

标签: python python-2.7

如果我有一个元组列表,请说:

    [(a,1),(a,2),(a,3),(b,1),(b,2),(b,3)]

其中a和b是整数,1,2,3是浮点数, 如何为每个元素(即a和b)的相应最小值和最大值创建一个新字典? 最低限度为{a:1,b:1},最大值为{a:3,b:3}。

1 个答案:

答案 0 :(得分:2)

非常强力的解决方案,应该很容易理解。

minDict={}
maxDict={}
for a,b in lst:
    if a not in minDict:
        minDict[a]=b
    elif b<minDict[a]:
        minDict[a]=b
    if a not in maxDict:
        maxDict[a]=b
    elif b>minDict[a]:
        maxDict[a]=b

print minDict
print maxDict

输出:

{a: 1, b: 1}
{a: 3, b: 3}

这是另一个使用包含在函数中的元组解包和字典生成器语句的选项,用于返回最小和最大字典的字典。

def getMinMax(lst):
    # Function returns dict of min, dict of max
    #   from a list of tuples each of len==2
    d = {}
    for k, v in lst:
        d[k] = d.get(k,[])+[v]
    return {k: min(d[k]) for k in d}, {k: max(d[k]) for k in d}

像这样使用:

lst = [(a,1),(a,2),(a,3),(b,1),(b,2),(b,3)]
minD, maxD = getMinMax(lst)

输出:

{a: 1, b: 1}
{a: 3, b: 3}