我将数据存储在字典中,其中key是一个整数,value是一个整数元组。 我需要得到最长元素的长度及其关键。
我发现这是为了获得超过dict的最大值:
def GetMaxFlow(flows):
maks=max(flows, key=flows.get)
return flows[maks],maks
我尝试修改并作为关键使用len
函数,但它不起作用,所以我尝试了一些合理而直接但效率低下的东西:
def GetMaxFlow(flows):
Lens={}
for a in flows.iteritems():
Lens[a[0]]=len(a[1])
maks=max(Lens, key=Lens.get)
return Lens[maks],maks
有没有更优雅,更pythonic的方式呢?
答案 0 :(得分:11)
这是我认为Python中lambda
仍然存在的原因之一。
def GetMaxFlow(flows):
maks=max(flows, key=lambda k: len(flows[k]))
return flows[maks],maks
专门返回len ...
def GetMaxFlow(flows):
maks=max(flows, key=lambda k: len(flows[k]))
return len(flows[maks]), maks
或者使用eumiro的解决方案,在这种情况下实际上更有意义。 (我误解了你的问题。)
答案 1 :(得分:4)
如果您需要长度和钥匙:
def GetMaxFlox(flows):
return max((len(v), k) for k,v in flows.iteritems())
如果您需要值和键:
def GetMaxFlox(flows):
return max((len(v), v, k) for k, v in flows.iteritems())[1:]
或
def GetMaxFlox(flows):
return max(((v, k) for k, v in flows.iteritems()), key=lambda (v,k): len(v))
答案 2 :(得分:0)
您不需要存储所有元素的长度,只需存储密钥和当前最长元组的长度:
def GetMaxFlow(flows):
maks_length=0
for key,value in flows.iteritems():
if len(value)>=maks_length:
maks_key = key
maks_length = len(value)
return maks_length, maks_key