python嵌套字典中的选择性展平和键查找

python嵌套字典中的选择性展平和键查找,python,dictionary,Python,Dictionary,我在json文件中提供了这种格式的数据 [ { "FIRST NAME": "Nasim", "EMAIL": "ac@iaculisnec.net", "ADDLINE1": "855-8805 Nunc. Avenue", "CITY": "Masterton", "LOCATION":{"ADDLINE2":"855-8805", "ADDLINE3":"Av

我在json文件中提供了这种格式的数据

 [
     {
        "FIRST NAME": "Nasim",
        "EMAIL": "ac@iaculisnec.net",
        "ADDLINE1": "855-8805 Nunc. Avenue",
        "CITY": "Masterton",
        "LOCATION":{"ADDLINE2":"855-8805",
                    "ADDLINE3":"Avenue",
                    "PIN":"100"}
      },
      {
        "FIRST NAME": "Xanthus",
        "EMAIL": "adipiscing.elit@tinciduntcongue.edu",
        "ADDLINE1": "357-4583 Curae; St.",
        "CITY": "Basildon",
        "LOCATION":{"ADDLINE2":"357-4583",
                    "ADDLINE3":"Curae; St.",
                        "PIN":"101"}
     },
     {
        "FIRST NAME": "Hedley",
        "EMAIL": "Quisque.libero.lacus@arcu.ca",
        "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不变。我想要一本扁平的字典。我能做些什么来即兴创作呢

我需要这张表上的钥匙 [名字、电子邮件、地址、位置{addline2、addline3、pin}] 即使添加了额外的嵌套值,它也应该以这种形式动态显示

 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 ']

如何仅获取嵌套字典键?@Shadow请您提出另一个更具体的问题我可以单独访问嵌套键,例如:如果我给出行['LOCATION'],我将获取该键的子键。但是当我给出row.keys()时,我将只得到外部键,而不是位于d位置的内部键。要一次获得所有外键和内键,我如何编写它。我需要的格式是[名字、电子邮件、地址、位置{addline2、addline3、pin}]。即使有额外的子键,也应自动显示