如果我有一个元组列表,请说:
[(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}。
答案 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}