Python:比较嵌套值-更简洁的方法
我是python新手,知道有更好的方法来完成这个极其简单的任务,但我似乎没有提出正确的问题,我希望这里的人能给我一些关于如何整理我的代码的建议-我觉得我正在编写大量代码来完成我正在做的事情 我正在用tvdb_api标记我录制的电视节目。api以有趣的结构(dict嵌套元组嵌套dict)返回横幅。基本结构为:Python:比较嵌套值-更简洁的方法,python,performance,for-in-loop,Python,Performance,For In Loop,我是python新手,知道有更好的方法来完成这个极其简单的任务,但我似乎没有提出正确的问题,我希望这里的人能给我一些关于如何整理我的代码的建议-我觉得我正在编写大量代码来完成我正在做的事情 我正在用tvdb_api标记我录制的电视节目。api以有趣的结构(dict嵌套元组嵌套dict)返回横幅。基本结构为: {"684x400": {"949520": {"_bannerpath": "http://tvdb.com/banners/somepath",
{"684x400":
{"949520":
{"_bannerpath": "http://tvdb.com/banners/somepath",
"rating" : 9.000
#etc...
},
"456520":
{"_bannerpath": "http://tvdb.com/banners/somepath",
"rating" : 9.000
#and so on...
}
}
}
我在数据结构中的项目上循环,比较评级
值,并获得评级最高的横幅的\u bannerpath
。我通过从结构中获取所有评级
和\u bannerpath
值,并将它们作为嵌套列表复制到一个列表中,然后将评级值分离到另一个列表中,并使用max获得最高值并返回相应的bannerpath
一定有比这更好的方法
posterList = []
for tup in bannerStructure:
for key in tup[1]:
if key == "rating":
posterList.append([tup[1]['rating'],tup[1]['_bannerpath']])
ratingList = []
for rating in posterList:
ratingList.append(rating[0])
maxRating = max(ratingList)
for lst in posterList:
if lst[0] == maxRating:
return lst[1]
谢谢你的帮助 您可以使用comprehension和
max
函数来获取此信息
max([(k["_bannerpath"], k["rating"]) for v in data.values() for k in v.values()], key=lambda x:x[1])
假设实际结构如下所示:
{"684x400":
{"949520":
{"_bannerpath": "http://tvdb.com/banners/somepath",
"rating" : 9.000
#etc...
},
"456520":
{"_bannerpath": "http://tvdb.com/banners/somepath",
"rating" : 9.000
#and so on...
}
}
}
然后,要查找每个分辨率具有最高评级的横幅:
from operator import itemgetter
for resolution, banners in tvdb_api_result.items():
bannerpath = max(banners.values(), key=itemgetter('rating'))['_bannerpath']
print("%s %s" % (resolution, bannerpath))
是否要为每个
nxm
分辨率获取具有最高评级的\u bannerpath
?您可以[a]使用排序的按评级排序,或[b]在循环中保持max运行。您发布的示例数据不是有效的python数据结构。@AshwiniChaudhary向J.F.Sebastian道歉,他是正确的+1我也将用这种方法进行实验。。。Python文档不适合我的大脑不幸的是。。。您是否打算简要解释lambda@leemo:确保评级
在输入中确实是浮动的,否则比较将不正确,例如“2”>“10”
。您可以使用:key=lambda b:float(b['rating'])
对其进行解析以获得2<10
。