【问题标题】:How To Recurisve JSON file without any loop (like:for,while,etc) in Python如何在 Python 中没有任何循环(例如:for、while 等)递归 JSON 文件
【发布时间】:2021-10-06 15:37:18
【问题描述】:

我很困惑如何在 Python3 中创建没有任何循环的递归函数来打印 JSON 文件。

所以我有大学的家庭作业,主题是关于函数的递归,讲师告诉我只使用递归而不是循环。

我在 Category.json 中的 json 文件是:

 [{'catId': 1, 'id': 1, 'name': 'Buku & Bangunan'},
 {'catId': 1, 'id': 2, 'name': 'Buku Codes & Standar'},
 {'catId': 1, 'id': 3, 'name': 'Buku Dekorasi & Ornamen'},
 {'catId': 1, 'id': 4, 'name': 'Buku Desain Dapur'},
 {'catId': 1, 'id': 5, 'name': 'Buku Desain Kamar'},
 {'catId': 1, 'id': 6, 'name': 'Buku Desain Ruang Keluarga'},
 {'catId': 1, 'id': 7, 'name': 'Buku Desain Ruang Tamu'},
 {'catId': 1, 'id': 8, 'name': 'Buku Desain Rumah'},
 {'catId': 1, 'id': 9, 'name': 'Buku Interior & Eksterior'},
 {'catId': 1, 'id': 10, 'name': 'Buku Metode & Material Bangunan'},
 {'catId': 1, 'id': 11, 'name': 'Buku Taman'},
 {'catId': 2, 'id': 12, 'name': 'Persiapan Tes CPNS'},
 {'catId': 2, 'id': 13, 'name': 'Persiapan Tes TOELF & IELTS'},
 {'catId': 2, 'id': 14, 'name': 'Persiapan TPA & Psikotest'},
 {'catId': 3, 'id': 15, 'name': 'Buku Aktivitas'},
 {'catId': 3, 'id': 16, 'name': 'Buku Cerita Anak'},
 {'catId': 3, 'id': 17, 'name': 'Buku Dongeng'},
 {'catId': 3, 'id': 18, 'name': 'Buku Dunia Pengetahuan'},
 {'catId': 3, 'id': 19, 'name': 'Buku Fabel'}]

我的python代码是:

import json

def showData(file):
    file_json = open(file)
    data = json.loads(file_json.read())

    return data

print(showData("Category.json"))

我没有完成我的代码,因为我仍然对如何在没有循环的情况下进行递归感到困惑。

你有什么想法吗?

【问题讨论】:

  • 你当前的代码有什么问题?

标签: python json loops dictionary recursion


【解决方案1】:

我不明白为什么您需要使用 recursion 来打印 JSON 文件而不是 iterations(for, while).

这是您使用递归打印数据的方式。

d = [{'catId': 1, 'id': 1, 'name': 'Buku & Bangunan'},
 {'catId': 1, 'id': 2, 'name': 'Buku Codes & Standar'},
 {'catId': 1, 'id': 3, 'name': 'Buku Dekorasi & Ornamen'},
 {'catId': 1, 'id': 4, 'name': 'Buku Desain Dapur'},
 {'catId': 1, 'id': 5, 'name': 'Buku Desain Kamar'},
 {'catId': 1, 'id': 6, 'name': 'Buku Desain Ruang Keluarga'},
 {'catId': 1, 'id': 7, 'name': 'Buku Desain Ruang Tamu'},
 {'catId': 1, 'id': 8, 'name': 'Buku Desain Rumah'},
 {'catId': 1, 'id': 9, 'name': 'Buku Interior & Eksterior'},
 {'catId': 1, 'id': 10, 'name': 'Buku Metode & Material Bangunan'}]

# Recursive Code
def print_json(j):
    # Base condition
    if len(j) == 0:
        return
    # Print the first item of j
    print(j[0])
    # Call the same function on j[1:]
    # Skipping the first item of j in every call
    print_json(j[1:])
    
print_json(d)
{'catId': 1, 'id': 1, 'name': 'Buku & Bangunan'}
{'catId': 1, 'id': 2, 'name': 'Buku Codes & Standar'}
{'catId': 1, 'id': 3, 'name': 'Buku Dekorasi & Ornamen'}
{'catId': 1, 'id': 4, 'name': 'Buku Desain Dapur'}
{'catId': 1, 'id': 5, 'name': 'Buku Desain Kamar'}
{'catId': 1, 'id': 6, 'name': 'Buku Desain Ruang Keluarga'}
{'catId': 1, 'id': 7, 'name': 'Buku Desain Ruang Tamu'}
{'catId': 1, 'id': 8, 'name': 'Buku Desain Rumah'}
{'catId': 1, 'id': 9, 'name': 'Buku Interior & Eksterior'}
{'catId': 1, 'id': 10, 'name': 'Buku Metode & Material Bangunan'}

你知道递归在内部使用称为递归堆栈的东西吗?

这是递归代码的一些额外空间开销。

【讨论】:

    【解决方案2】:

    我不确定我是否正确理解了这个问题。您想使用不同的打印语句打印每个字典吗?

    据我了解,您正在尝试为非常简单的事情做一些复杂的事情。由于您没有嵌套数据,您可以通过将整个列表传递给递归函数来进行递归,然后只打印第一个元素并将列表的其余部分再次传递回递归函数。

    def recursive_print(datas):
        print(datas[0])
    
        if len(datas) > 1:
            recursive_print(datas[1:])
    

    重新陈述你的问题我误解了你的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 2020-12-17
      • 2012-10-20
      相关资源
      最近更新 更多