从嵌套字典中获取键值

时间:2017-10-29 19:44:31

标签: python json python-3.x

我正在尝试编写一个非常简单但模块化的脚本来重命名文件。

我想处理JSON文件的内容,但是,我坚持要返回一个键(对象?)的所有子值而不仅仅是一个。

到目前为止,我的测试代码看起来像这样:

import json

DB_dict = json.load(open("../source_code/db3.json", encoding='utf-8-sig'))
old_names_of_Book1 = DB_dict["Book1"]["Book1_section1"]["old_name"]
print(old_names_of_Book1)
print("________________________")

for key, values in DB_dict.items():
    print(key)
    print(values)

导入的db3.json的内容:

{
  "Book1": {
    "Book1_section1": {
      "old_name": "Adventures of X1",
      "new_name": "Adventures of Y1"
    },
    "Book1_section2": {
      "old_name": "Adventures of X2",
      "new_name": "Adventures of Y2"
    },
    "Book1_section3": {
      "old_name": "Adventures of X3",
      "new_name": "Adventures of Y3"
    },
    "Book1_section4": {
      "old_name": "Adventures of X4",
      "new_name": "Adventures of Y4"
    }
  },
  "Book2": {
    "Book2_section1": {
      "old_name": "Adventures of X1",
      "new_name": "Adventures of Y1"
    },
    "Book2_section2": {
      "old_name": "Adventures of X2",
      "new_name": "Adventures of Y2"
    },
    "Book2_section3": {
      "old_name": "Adventures of X3",
      "new_name": "Adventures of Y3"
    },
    "Book2_section4": {
      "old_name": "Adventures of X4",
      "new_name": "Adventures of Y4"
    }
  }
}

JSON文件中的Book1,Book2,Book x 键将在脚本中进行硬编码,因为我想根据用户输入使用分支语句重命名不同的文件。例如,如果用户选择Book1,则将每个old_name值重命名为new_name,但不要介意“部分”的出现次数。 (部分的数量(Book1_section1)可能会随着时间的推移而改变,因此,我希望我的脚本能够在每次出现的部分上进行迭代。)

我的问题是,我不知道如何忽略我的JSON中的Book1_section1Book1_section2等密钥并仅解析其内容。随着

print(DB_dict["Book1"]["Book1_section1"]["old_name"])

我可以获得我想要的价值,但我不知道如何获得所有价值。

1 个答案:

答案 0 :(得分:1)

你应该尝试使用嵌套的dict遍历

for m,n in DB_dict.items():
    if m == str("Book1"):
        for x,y in n.items():
            print(y["old_name"])