我有一个列表,我存储在嵌套的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中。
{
type: "Test",
name: "A",
sub_name: "B01",
pos: 828288,
s_type: 1,
x_type: 7,
chr = {
'C': 5
'T': 6
}
}
是否有办法避免创建嵌套的defaultdict并将每个元素直接存储到MongoDB并应用更新?
更新:对于第一个列表,它应该是'chr': { 'i[6]': i[7]}
,应该提供'chr': { 'C': 5}
。
对于第二个列表,与第一个列表相比,后两个元素只有不同。
我想将'T', 6
添加到之前的chr
以获取'chr': { 'C': 5, 'T', 6}
。
我创建了嵌套的defaultdict
,以便组合相同的元素和最后两个不同的元素,我想将它们存储在chr dict中。
答案 0 :(得分:1)
您为什么要创建嵌套的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.
答案 1 :(得分:0)
解决方案:
#!/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)