要存储在MongoDB中的列表列表

2024-09-29 23:16:05 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我存储在嵌套的defaultdict中的列表:

from collections import defaultdict

if __name__ == "__main__":

r = [["Test", "A", "B01", 828288,  1,    7, 'C', 5],
    ["Test", "A", "B01", 828288,  1,    7, 'T', 6],
    ["Test", "A", "B01", 171878,  3,    8, 'C', 5],
    ["Test", "A", "B01", 171878,  3,    8, 'T', 6],
    ["Test", "A", "B01", 871963,  3,    9, 'A', 5],
    ["Test", "A", "B01", 871963,  3,    9, 'G', 6],
    ["Test", "A", "B01", 1932523, 1,   10, 'T', 4],
    ["Test", "A", "B01", 1932523, 1,   10, 'A', 5],
    ["Test", "A", "B01", 1932523, 1,   10, 'X', 6],
    ["Test", "A", "B01", 667214,  1,   14, 'T', 4],
    ["Test", "A", "B01", 667214,  1,   14, 'G', 5],
    ["Test", "A", "B01", 667214,  1,   14, 'G', 6]]

s = defaultdict(lambda:
        defaultdict(lambda:
                defaultdict(lambda:
                    defaultdict(lambda:
                            defaultdict(lambda:
                                defaultdict(lambda:
                                        defaultdict(defaultdict)))))))

for i in r:
    s[i[0]][i[1]][i[2]][i[3]][i[4]][i[5]][i[6]] = i[7]

但是,我不确定如何将上面嵌套的defaultdict转换为Dict/JSON(见下文),以便将其存储到MongoDB。在

^{pr2}$

有没有一种方法可以避免创建嵌套的defaultdict并将每个元素直接存储到MongoDB并应用更新?在

更新:对于第一个列表,它应该是'chr': { 'i[6]': i[7]},它应该给出'chr': { 'C': 5}。 与第一个列表相比,第二个列表只在最后两个元素上有所不同。 我想把'T', 6加到前面的chr得到{}。 我创建了嵌套的defaultdict,以便组合相同的元素和最后两个不同的元素,我希望将它们存储在chr dict中


Tags: lambdanamefromtestimport元素列表for
2条回答

解决方案:

#!/usr/bin/env python

from pymongo import MongoClient
from collections import defaultdict



db = MongoClient().test
sDB = db.sss

r = [["Test", "A", "B01", 828288,  1,    7, 'C', 5],
    ["Test", "A", "B01", 828288,  1,    7, 'T', 6],
    ["Test", "A", "B01", 171878,  3,    8, 'C', 5],
    ["Test", "A", "B01", 171878,  3,    8, 'T', 6],
    ["Test", "A", "B01", 871963,  3,    9, 'A', 5],
    ["Test", "A", "B01", 871963,  3,    9, 'G', 6],
    ["Test", "A", "B01", 1932523, 1,   10, 'T', 4],
    ["Test", "A", "B01", 1932523, 1,   10, 'A', 5],
    ["Test", "A", "B01", 1932523, 1,   10, 'X', 6],
    ["Test", "A", "B01", 667214,  1,   14, 'T', 4],
    ["Test", "A", "B01", 667214,  1,   14, 'G', 5],
    ["Test", "A", "B01", 667214,  1,   14, 'G', 6]]

for i in r:
    d = {
    'type': i[0],
    'name': i[1],
    'sub_name': i[2],
    'pos': i[3],
    's_type': i[4],
    'x_type': i[5],
    'chr': { i[6]: i[7]}
    }
    sDB.update({"x_type": i[5]}, {"$push": {"chr":{i[6]: i[7]} }}, True)

为什么要创建那个嵌套的defaultdict结构?您需要快速查找每个密钥吗?如果您在Mongo中保存,为什么不让Mongo通过为重要字段创建索引来为您进行查找呢。在

我只需做以下几点:

r = [["Test", "A", "B01", 828288,  1,    7, 'C', 5],
    ["Test", "A", "B01", 828288,  1,    7, 'T', 6],
    ["Test", "A", "B01", 171878,  3,    8, 'C', 5],
    ["Test", "A", "B01", 171878,  3,    8, 'T', 6],
    ["Test", "A", "B01", 871963,  3,    9, 'A', 5],
    ["Test", "A", "B01", 871963,  3,    9, 'G', 6],
    ["Test", "A", "B01", 1932523, 1,   10, 'T', 4],
    ["Test", "A", "B01", 1932523, 1,   10, 'A', 5],
    ["Test", "A", "B01", 1932523, 1,   10, 'X', 6],
    ["Test", "A", "B01", 667214,  1,   14, 'T', 4],
    ["Test", "A", "B01", 667214,  1,   14, 'G', 5],
    ["Test", "A", "B01", 667214,  1,   14, 'G', 6]]

for i in r:
    d = {
        'type': i[0],
        'name': i[1],
        'sub_name': i[2],
        'pos': i[3],
        's_type': i[4],
        'x_type': i[5],
        'chr': { 'C': i[6], 'T': i[7]}
    }
    #now save dictionary "d" into mongo.

相关问题 更多 >

    热门问题