一个班轮 - 词典理解

时间:2016-12-08 17:18:10

标签: python data-structures

我正在将neo4j批量迁移到sql。我想拥有以下数据结构:

data = [{r.__dict__['_keys']: r.__dict__['_values']} for r in result]

我有以下代码行来解析neo4j查询的结果:

[{(key1_1, key1_2): (value1_1, value1_2)}, {(key2_1, key2_2): (value2_1, value2_2)}, etc]

但是,这会将数据返回为:

ViewCompat

如果可能的话,如何在一个漂亮的衬里中纠缠数据?

2 个答案:

答案 0 :(得分:2)

您需要压缩密钥和值,并将其传递给dict()来电,不需要字典理解:

data = [dict(zip(r._keys, r._values)) for r in result]

此处,每次dict()调用都会生成(key, value)zip()对的新词典__dict__

我在这里没有直接访问_keys,使用_values>>> class Record(object): ... def __init__(self, keys, values): ... self._keys, self._values = keys, values ... >>> result = [Record(('key1_1', 'key1_2'), ('value1_1', 'value1_2')), Record(('key2_1', 'key2_2'), ('value2_1', 'value2_2'))] >>> [dict(zip(r._keys, r._values)) for r in result] [{'key1_1': 'value1_1', 'key1_2': 'value1_2'}, {'key2_1': 'value2_1', 'key2_2': 'value2_2'}] 属性就足够了。

演示:

var http = require('http');
var fs = require('fs');

function getFullPath(file){
    return new Promise(function(resolve, reject){
        fs.realpath(file, function(err, path){
            resolve(path);
        });
    });
}

function getFileSize(file){
    return new Promise(function(resolve, reject){
        fs.stat(file, function(err, stats){
            resolve(stats.size);
        });
    });
}

function calculateSize(files){
    var size = 0;
    var files_count = files.length-1;

    return new Promise(function(resolve, reject){
        files.forEach(function(file, i){
            getFullPath(file).then(getFileSize).then(function(tempSize){
                size += tempSize;
                console.log(file, tempSize);
                if(files_count == i){
                    resolve(size);
                }
            });
        });
    });
}

function getFiles(path){

    console.warn('Staring path:',path);

    return new Promise(function(resolve, reject){
        fs.readdir(path, function(err, files){

            if(err || !files){
                reject(err);
            } else {
                resolve(files);
            }
        });
    });
}

getFiles('/home/galio/DEV/js-sandbox').then(function(result){
    return calculateSize(result);
}, function(err){
    console.log('ERROR:', err);
}).then(function(size){
    console.log('All files size is: ', size);
});

答案 1 :(得分:1)

由于您的示例未提及任何明确的输入,因此很难确定这是否有效。但我认为这应该有效:

 data = [dict(zip(r.__dict__['_keys'], r.__dict__['_values'])) for r in result]

这将解压缩每个子条款中的键和值。