将列表成对转换为字典?

时间:2016-11-21 09:47:02

标签: python python-2.7

我有一个列表,我想将它转换为Python中的字典列表。

我的清单是:

$("#gpline").click(function () {
    var gplineval = "Value";

    var grouplistvalues = @Html.Raw(Json.Encode(Session["grouplist"]));
    alert(JSON.stringify(grouplistvalues));

    var found = jQuery.inArray(parseInt(nslineval), grouplistvalues);

    if (found >= 0) {
        // Element was found, remove it.
        grouplistvalues.splice(found, 1);
    }
    else {
        // Element was not found, add it.
        grouplistvalues.push(parseInt(nslineval));
    }        

    alert(JSON.stringify(grouplistvalues));

    // updating the session object 
    @Session["grouplist"] = grouplistvalues

});

我想把它转换成这样的东西:

a = ["a", "b", "c", "d", "e", "f"]

3 个答案:

答案 0 :(得分:6)

zip和列表理解是要走的路:

>>> a = ["a","b","c","d","e","f"]
>>> [{'key': k, 'value': v} for k, v in zip(a[::2], a[1::2])]
[{'value': 'b', 'key': 'a'}, {'value': 'd', 'key': 'c'}, {'value': 'f', 'key': 'e'}]

注意如何从0和1开始,然后压缩,从两个步骤切割列表。

答案 1 :(得分:3)

更好的方法是将itertool.izip_longest()列表理解一起使用,因为如果元素的数量为奇数,它会将值设置为None。例如:

>>> from itertools import izip_longest
>>> odd_list = ["a", "b", "c"]
>>> [{'key': k, 'value': v} for k, v in izip_longest(odd_list[::2], odd_list[1::2])]
[{'value': 'b', 'key': 'a'}, {'value': None, 'key': 'c'}]
#                                       ^ Value as None

但是,如果可以安全地假设偶数元素,您可以使用zip()以及:

>>> my_list = ["a","b","c","d","e","f"]
>>> [{'key': k, 'value': v} for k, v in zip(my_list[::2], my_list[1::2])]
[{'value': 'b', 'key': 'a'}, {'value': 'd', 'key': 'c'}, {'value': 'f', 'key': 'e'}]

答案 2 :(得分:1)

这可以是一种方法:

lst = [{"Key": a[2 * i], "Value": a[2 * i + 1]} for i in range(len(a) / 2)]

注意:列表a必须包含偶数或元素才能正常工作