2015-04-08 3 views
0

У меня есть данные в этом формате, присутствующий в JSon файлселективного уплощения в питоне вложенного словаря и поиск ключи

[ 
    { 
     "FIRST NAME": "Nasim", 
     "EMAIL": "[email protected]", 
     "ADDLINE1": "855-8805 Nunc. Avenue", 
     "CITY": "Masterton", 
     "LOCATION":{"ADDLINE2":"855-8805", 
        "ADDLINE3":"Avenue", 
        "PIN":"100"} 
     }, 
     { 
     "FIRST NAME": "Xanthus", 
     "EMAIL": "[email protected]", 
     "ADDLINE1": "357-4583 Curae; St.", 
     "CITY": "Basildon", 
     "LOCATION":{"ADDLINE2":"357-4583", 
        "ADDLINE3":"Curae; St.", 
         "PIN":"101"} 
    }, 
    { 
     "FIRST NAME": "Hedley", 
     "EMAIL": "[email protected]", 
     "ADDLINE1": "315-623 Nibh. Road", 
     "CITY": "Abingdon", 
     "LOCATION":{"ADDLINE2":"315-623", 
        "ADDLINE3":"Nibh. Road", 
        "PIN":"102"} 
    }] 

это мой код

data=json.loads(file('grade.json').read()) 
for row in data: 
     row['ADDRESS']= row['ADDLINE1']+','+ row['CITY'] 
     del row['CITY'], row['ADDLINE1'] 
     row['LOCATION1']=row['LOCATION']['ADDLINE2']+','+row['LOCATION'] ['ADDLINE3']+','+row['LOCATION']['PIN'] 
     del row['LOCATION'] 
data =json.loads(file('grade.json').read()) 
out = {} 

for sub in data.values(): 
     for key, value in sub.items(): 
      if key in out: 
       del out[key] 
      else: 
       out[key] = value 

print(out) 

file('files','w').write(json.dumps(data)) 
out_path= "outfile9.csv" 
fieldnames = list(set(k for d in data for k in d)) 
    with open(out_path, 'wb') as out_file: 
    writer = csv.DictWriter(out_file, fieldnames=fieldnames, dialect='excel') 
    writer.writeheader() 
    writer.writerows(data) 

я хочу, чтобы удалить d вложенного словарь (LOCATION1 , здесь после форматирования - ранее было LOCATION), но сохранить ADDLINE2,3, PIN как то же самое. Я хочу сплющенный словарь. что я могу сделать, чтобы импровизировать?

я требую ключей в этой форме [Firstname, адрес электронной почты, адрес {addline2, addline3, контактный}] даже если дополнительные вложенные значения добавляются должен динамически появляться в таком виде

ответ

0
data=json.loads(file('grade.json').read()) 
for row in data: 
     row['ADDRESS']= row['ADDLINE1']+','+ row['CITY'] 
     del row['CITY'], row['ADDLINE1'] 
     row['LOCATION1']=row['LOCATION']['ADDLINE2']+','+row['LOCATION'] ['ADDLINE3']+','+row['LOCATION']['PIN'] 
     del row['LOCATION'] 
data =json.loads(file('grade.json').read()) 

выше все бесполезно из-за последней строки, сбрасывает данные. выравниваться ADDLINE2,3, PIN-код, добавьте в приведенном выше цикле, прежде чем все остальное

row['ADDLINE2'] = row['LOCATION']['ADDLINE2'] 
row['ADDLINE3'] = row['LOCATION']['ADDLINE3'] 
row['PIN '] = row['LOCATION']['PIN '] 
+0

я получил его .. спасибо u :) – Shadow

+0

как получить вложенные словарные только ключи? – Shadow

+0

@Shadow вам предлагается задать еще один конкретный вопрос. –

Смежные вопросы