我有一个列表,我想将它转换为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"]
答案 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
必须包含偶数或元素才能正常工作