如何在 Python 中没有任何循环(例如:for、while 等)递归 JSON 文件

Posted

技术标签:

【中文标题】如何在 Python 中没有任何循环(例如:for、while 等)递归 JSON 文件【英文标题】:How To Recurisve JSON file without any loop (like:for,while,etc) in Python 【发布时间】: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"))

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

你有什么想法吗?

【问题讨论】:

你当前的代码有什么问题? 【参考方案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:])

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

【讨论】:

以上是关于如何在 Python 中没有任何循环(例如:for、while 等)递归 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章

循环多个for循环,Python中骰子的所有可能性

[Python3]循环控制

python中for循环的用法

使用Python for循环,我怎样才能每次都从一个字符串中取出一个字母而没有任何重复

如何在for循环Python中拆分数组

为啥在下面的 for 循环中没有任何条件检查?