簡體   English   中英

如何在Python列表理解中返回iterable

[英]How to return iterable in Python list Comprehension

在下面的代碼中:

states = ["A","B","C","D"]
priors = {"A": 1.0, "B": -1.0, "C": 0, "D": 0}

values = {}    #setup an empty dictionary
for s in states:   
    values[s] = {"Value1": priors[s], "Value2": 3.0} 

max_val = max(values[prevS]["Value1"]*-1 for prevS in states)

我需要返回max_val 對應於該最大值的prevS。 我怎樣才能做到這一點?

你可以這樣做:

>>> max((values[prevS]["Value1"]*-1, prevS) for prevS in states)
(1.0, 'B')

這將使值及其prevS值成為元組,並取其中的最大值。 由於“值”首先出現,因此最大值將首先作用於該值,並且prevS值僅用於打破平局。

也許這就是您想要的?

states = ["A","B","C","D"]
priors = {"A": 1.0, "B": -1.0, "C": 0, "D": 0}

values = ((item[0], item[1]*-1) for item in priors.items() if item[0] in states)

print max(values, key=lambda i:i[1])

結果

('B', 1.0)

或這個:

states = ["A","B","C","D"]
priors = {"A": 1.0, "B": -1.0, "C": 0, "D": 0}

values = {item[0]:{'Value1':item[1]*-1, 'Value2':3.0} for item in priors.items() if item[0] in states}

print  max(values.items(), key=lambda i: i[1]['Value1'])

結果

('B', {'Value2': 3.0, 'Value1': 1.0})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM