Python从列表列表中创建一个dict

时间:2015-04-10 08:01:46

标签: python list dictionary datatables datatables-1.10

我使用的是django 1.8,Python 2.7.5,django-datatables-view 1.2datatables 1.10.6。尝试使用columndefscolumns.render时,我收到以下错误:

警告:请求未知......

我查看了这个here的文档,基本上发现数据表不知道我要求的数据,因为它无法找到它。所以我查看了数据的返回方式:

{
    "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你需要一个键:值对,这样你就可以定义"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

我不能为我的生活弄清楚如何将这个列表列表转换为以下列方式返回结果的字典:

{
    "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"
}

我明白我可以完成我想要用dict理解做的事情,但我无法找到一种方法来完全按照我想要输出的方式来获得它。我还必须相信有一种更好的方法可以做到这一点,而不是在已经准备好的列表清单上对字典进行理解。任何和所有的帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:2)

假设您的数据属于datas变量,您可以执行以下操作:

keys = ["Rest Id", "Host Name", "Ip Address", "Mode", "State"]
datas["data"] = [dict(zip(keys, d)) for d in datas["data"]]

答案 1 :(得分:0)

我道歉但是我通过datatables 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>';
            },
    },
    ....
],

此外,我脑子里的声音是我上面所说的,我应该说的是,默认情况下,datatables 期望一个javascript对象(至少他们所有的每个例子都显示了被解析的数据)是一个对象)但我回来的是一个javascript数组(如果你有半个大脑仍然有效,我没有)。将保持开放,看看是否可以提供python解决方案。