2015-10-22 5 views
0

У меня есть словарь python (nested), из которого я хочу создать таблицу (а затем csv file). Проблема в том, что если значение является int, оно не будет добавлено в таблицу «table». Он даже не просматривает остальные заявления elif/if.Вложенный словарь wont print ints

Я пытаюсь составить список (таблицу), который будет иметь все значения и ключи, если словарь.

table = [] 
def indict(d): 
     for (k, v) in d.items(): 

      def indict(d): 
for (k, v) in d.items(): 

    if isinstance(v, dict): 
     table.append([str(k) + ":"]) 
     indict(v) 
     print "another dictionary " 
    elif type(v) == list: 
     table.append([str(k),"list"]) 
     print "appended as list" 
    elif type(v) != unicode and type(v) != list: 
     print v 
     v = str(v) 
     print v + " converted" 
     #print d[i] 
    else: 
     table.append([str(k), v]) 
     print "simply value" 

Вот пример словаря:

{u'city': {u'uname': u'london', u'id': 1, u'name': u'London'}, u'notice': u'', u'neighborhood': {u'uname': u'papaya-tree', u'id': 5, u'name': u'Papaya Tree'},.... 

это не append'id», ни 1.

+0

Почему вы организовали ветку с «не unicode, dict или list», затем «dict», затем «list», затем «все остальное?». Я думаю, что было бы гораздо более ясно, как «dict», затем «list», затем «unicode», затем «все остальное». – TigerhawkT3

+0

@ K.B что именно вы пытаетесь достичь здесь? Каков ваш ожидаемый результат? –

+0

Я думаю, он хочет «сгладить» dict в список кортежей ... – labheshr

ответ

0

Самый естественный способ сделать это использовать рекурсию ... вот пример :

d = { u'city': {u'uname': u'london', u'id': 1, u'name': u'London'} } 
output = list() 
def testdict(d,output): 
    for k,v in d.iteritems(): 
     if type(v) == dict: 
      testdict(v,output) 
     else: 
      output.append((str(k),v)) 

testdict(d,output) 

print output # prints:[('uname', u'london'), ('id', 1), ('name', u'London')] 
Смежные вопросы