Python 从列表的列表中创建字典
Python create a dict from a list of lists
我正在使用 django 1.8,Python 2.7.5,django-datatables-view 1.2, and datatables 1.10.6. When trying to use columndefs and columns.render 我收到以下错误:
警告:请求未知...
我查阅了有关此 here 的文档,基本上发现 datatables 不知道我请求的是什么数据,因为它找不到。所以我查看了数据是如何返回的:
{
"recordsTotal": 176,
"recordsFiltered": 176,
"draw": 0,
"data": [
[
109,
"Hostname1",
"1.1.1.1",
"Excluded",
"Down"
],
[
116,
"Hostname2",
"2.2.2.2",
"Excluded",
"Up"
],
...
],
"result": "ok"
}
所以我在使用 PHP 之前使用过数据表,为了使用 def 列,你需要一个 key:value 对,这样你就可以定义 "data": "Key"
,这显然不是.我想我已经缩小了构建准备好的结果的范围:
def prepare_results(self, qs):
data = []
for item in qs:
data.append([self.render_column(item, column) for column in self.get_columns()])
return data
我这辈子都想不出如何将这个列表列表转换为 returns 以下列方式得到结果的字典:
{
"recordsTotal": 176,
"recordsFiltered": 176,
"draw": 0,
"data": [
{
"Rest Id": "109",
"Host Name": "Hostname1",
"Ip Address": "1.1.1.1",
"Mode": "Excluded",
"State": "Down"
},
{
"Rest Id": "116",
"Host Name": "Hostname2",
"Ip Address": "2.2.2.2",
"Mode": "Excluded",
"State": "Up"
},
...
],
"result": "ok"
}
我知道我可以通过听写理解来完成我想做的事情,但我想不出一种方法来完全按照我希望的方式返回输出。我还必须相信,有一种更好的方法可以做到这一点,而不是在已经准备好之后对列表列表进行字典理解。任何和所有帮助将不胜感激。提前谢谢你。
假设您的数据是 datas
变量,您可以执行以下操作:
keys = ["Rest Id", "Host Name", "Ip Address", "Mode", "State"]
datas["data"] = [dict(zip(keys, d)) for d in datas["data"]]
抱歉,我通过数据表 javascript 直接解决了我自己的问题,而不是在 python 代码中进行更改:
"columnDefs": [
{
"targets": 0,
"data": 0,
"render": function ( data, type, full, meta ) {
return '<span data-clipboard-text="' + data + '">' + String(data) + '</span>' +
'<a href="URLICANNOTSHARE' + data +
'MOREOFTHEURLICANNOTSHARE" class="btn btn-info btn-xs" role="button" target="_blank" style="float:right;"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></a>';
},
},
....
],
此外,我脑子里乱七八糟的,我在上面说的和我应该说的是,默认情况下数据表 期望 一个 javascript 对象(至少每个例子他们已经显示正在解析的数据是一个对象)但我返回的是一个 javascript 数组(如果你有半个大脑,它仍然有效,但我没有)。将保持开放状态,看看是否可以提供 python 解决方案。
我正在使用 django 1.8,Python 2.7.5,django-datatables-view 1.2, and datatables 1.10.6. When trying to use columndefs and columns.render 我收到以下错误:
警告:请求未知...
我查阅了有关此 here 的文档,基本上发现 datatables 不知道我请求的是什么数据,因为它找不到。所以我查看了数据是如何返回的:
{
"recordsTotal": 176,
"recordsFiltered": 176,
"draw": 0,
"data": [
[
109,
"Hostname1",
"1.1.1.1",
"Excluded",
"Down"
],
[
116,
"Hostname2",
"2.2.2.2",
"Excluded",
"Up"
],
...
],
"result": "ok"
}
所以我在使用 PHP 之前使用过数据表,为了使用 def 列,你需要一个 key:value 对,这样你就可以定义 "data": "Key"
,这显然不是.我想我已经缩小了构建准备好的结果的范围:
def prepare_results(self, qs):
data = []
for item in qs:
data.append([self.render_column(item, column) for column in self.get_columns()])
return data
我这辈子都想不出如何将这个列表列表转换为 returns 以下列方式得到结果的字典:
{
"recordsTotal": 176,
"recordsFiltered": 176,
"draw": 0,
"data": [
{
"Rest Id": "109",
"Host Name": "Hostname1",
"Ip Address": "1.1.1.1",
"Mode": "Excluded",
"State": "Down"
},
{
"Rest Id": "116",
"Host Name": "Hostname2",
"Ip Address": "2.2.2.2",
"Mode": "Excluded",
"State": "Up"
},
...
],
"result": "ok"
}
我知道我可以通过听写理解来完成我想做的事情,但我想不出一种方法来完全按照我希望的方式返回输出。我还必须相信,有一种更好的方法可以做到这一点,而不是在已经准备好之后对列表列表进行字典理解。任何和所有帮助将不胜感激。提前谢谢你。
假设您的数据是 datas
变量,您可以执行以下操作:
keys = ["Rest Id", "Host Name", "Ip Address", "Mode", "State"]
datas["data"] = [dict(zip(keys, d)) for d in datas["data"]]
抱歉,我通过数据表 javascript 直接解决了我自己的问题,而不是在 python 代码中进行更改:
"columnDefs": [
{
"targets": 0,
"data": 0,
"render": function ( data, type, full, meta ) {
return '<span data-clipboard-text="' + data + '">' + String(data) + '</span>' +
'<a href="URLICANNOTSHARE' + data +
'MOREOFTHEURLICANNOTSHARE" class="btn btn-info btn-xs" role="button" target="_blank" style="float:right;"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></a>';
},
},
....
],
此外,我脑子里乱七八糟的,我在上面说的和我应该说的是,默认情况下数据表 期望 一个 javascript 对象(至少每个例子他们已经显示正在解析的数据是一个对象)但我返回的是一个 javascript 数组(如果你有半个大脑,它仍然有效,但我没有)。将保持开放状态,看看是否可以提供 python 解决方案。