2017-06-07 94 views
0

这是我目前在MongoDB中使用的文档。通过mongo的python字典进行递归迭代

{ 
"name":"food", 
"core":{ 
    "group":{ 
     "carbs":{ 
      "abbreviation": "Cs" 
      "USA":{ 
       "breakfast":"potatoes", 
       "dinner":"pasta" 
      }, 
      "europe":{ 
       "breakfast":"something", 
       "dinner":"something big" 
      } 
     }, 
     "abbreviation": "Ds" 
     "dessert":{ 
      "USA":{ 
       "breakfast":"potatoes and eggs", 
       "dinner":"pasta" 
     }, 
     "europe":{ 
       "breakfast":"something small", 
       "dinner":"hello" 
     } 
    }, 
     "abbreviation": "Vs" 
     "veggies":{ 
         "USA":{ 
           "breakfast":"broccoli", 
           "dinner":"salad" 
         }, 
         "europe":{ 
           "breakfast":"cheese", 
           "dinner":"asparagus" 
         } 
       } 
      } 
     } 
} 

我用下面几行代码从mongo中提取数据。

data = collection.foodie.find({"name":"food"}, {"name":False, '_id':False}) 
def recursee(d): 
    for k, v in d.items(): 
     if isinstance(v,dict): 
      print recursee(d) 
     else: 
      print "{0} : {1}".format(k,v) 

然而,当我运行recursee功能,它无法打印组:碳水化合物,组:甜点,或基团:蔬菜。相反,我得到下面的输出。

breakfast : something big 
dinner : something 
None 
abbreviation : Cs 
breakfast : potatoes 
dinner : pasta 
None 
None 
breakfast : something small 
dinner : hello 
None 
abbreviation : Ds 
breakfast : potatoes and eggs 
dinner : pasta 
None 
None 
breakfast : cheese 
dinner : asparagus 
None 
abbreviation : Vs 
breakfast : broccoli 
dinner : salad 

我跳过了一些我的递归绕过打印组和相应的值吗?

回答

1

docs

return语句返回从函数的值。 return没有表达式参数返回None。掉到函数的末尾也会返回None

因为你recursee没有return声明,即它含蓄地返回None,所以下面的语句

print recursee(d) 

d对象作为参数和打印功能输出(这是None

执行 recursee

试试

def recursee(d): 
    for k, v in d.items(): 
     if isinstance(v, dict): 
      print "{0} :".format(k) 
      recursee(d) 
     else: 
      print "{0} : {1}".format(k, v)