如何在 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 文件的主要内容,如果未能解决你的问题,请参考以下文章