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

如何在Python列表理解中返回iterable,python,list-comprehension,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

在以下代码中:

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和与该max值对应的prevS。我怎样才能做到这一点?

您可以做到:

>>> max((values[prevS]["Value1"]*-1, prevS) for prevS in states)
(1.0, 'B')
这将生成值及其上一个值的元组,并取其中的最大值。由于“值”位于第一位,max将首先对该值进行操作,而prevS值将仅用于断开连接。

您可以执行以下操作:

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

这将生成值及其上一个值的元组,并取其中的最大值。由于“值”排在第一位,max将首先对其进行操作,而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)
('B', {'Value2': 3.0, 'Value1': 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', 1.0)
('B', {'Value2': 3.0, 'Value1': 1.0})

也许这就是你想要的

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)
('B', {'Value2': 3.0, 'Value1': 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', 1.0)
('B', {'Value2': 3.0, 'Value1': 1.0})

为什么您的
max\u val
代码处于循环中?它不使用循环变量,所以每次都会重复执行相同的操作,运行很多次。您有4个最大值:1.0、1.0、0.0和0.0。你想保留哪一个?我澄清了问题以消除该问题。它的核心是我正在尝试获取max()和生成它的状态prevS。您可能希望刷新和的内存。为什么您的
max\u val
代码处于循环中?它不使用循环变量,所以每次都会重复执行相同的操作,运行很多次。您有4个最大值:1.0、1.0、0.0和0.0。你想保留哪一个?我澄清了问题以消除该问题。它的核心是我正在尝试获取max()和生成它的状态prevS。您可能需要刷新和的内存。