概念想法:嵌套迭代可能很棘手

2024-04-24 00:46:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我的想法很简单,我要找的是指点、批评、批评等等。你知道吗

我知道人们可以迭代某些数据类型,这对于任何编程语言都是非常重要和基础的。但是,如果需要一个嵌套循环(可能是为了比较),或者在我的例子中,创建一个更简单、更整洁的for循环的方法,该for循环中接下来的两个iterables。你知道吗

我们知道Python可以期望一定数量的值,例如

for key in dictionary_data:
    # do some stuff with it
    pass

Python在这里期望一个值从右变量解压到左变量中,直到,嗯,我猜它在后台捕获StopIteration或其他东西。你知道吗

我们还知道Python for循环可以处理多个解包值,如下所示:

for key, index in enumerate(dictionary_data):
    # do some more cool stuff
    pass

但是让我们以JSON字符串(或对象)为例,它是一个字典。如果我们有两个JSON字符串要比较呢?在使用Alec的pipe up之前,不,if JSONString1 == JSONString2不是一个合适的选项,因为我需要比较每个JSON字符串中的各个字段,以比较每个版本的JSON字符串之间的差异。例如,在第1版和第2版中,存在这些差异,X被添加,而Y被删除。你知道吗

我还了解到,字典、JSON字符串等都有内置函数来直接访问键(.items())的值,但这通常不适用于嵌套或双嵌套的JSON字符串,您需要将for循环嵌套到JSON字符串中的nth个嵌套(如果JSON字符串,需要5或6个for循环)。你知道吗

在我看来,这似乎是相当倒退和适得其反,所以这里是长期和短期的一切

有没有已经存在的东西可以检测json字符串(或python字典)中存在多少层嵌套?此外,一旦检测到,它是否可以提取Python对象的键和值以供以后比较?你知道吗

到目前为止,这是我正在处理的,但它仅仅是一个概念设计的想法,并没有完成既没有适当的测试。你知道吗

import json

js = '{"list":{"entry":[{"recordId":2,"deleted":0,"createdBy":"user.name","created":1542038309023,' \
     '"id":"6e526a31-0e42-4fd9-8a0f-416e12354562", "fields":{"inuseby":"otheruser.name","returndate":1542240000000, ' \
     '"sensor":"93b33535-6273-40a9-a7c3-45dd6a87d4b4","startdate":1541980800000,"class":"fields","version":1,' \
     '"SATstatus":"error"},"ownedBy":"user.name"}]}}'


jsl = json.loads(js)

class JSONHookers(object):

    def __init__(self):
        self.js = js
        self.jsl = json.loads(js)
        if self.jsl:

            for key, value in jsl.items():
                self.__dict__[key] = value
                for k, v in value.items():
                    self.__dict__[k] = v
                    for entries in v:
                        self.__dict__['entry'] = entries
                        print('Key: {}\nHas value/s of\n{}\n'.format('fields', fields))


if __name__ == '__main__':
    jh = JSONHookers()

Tags: key字符串nameinselfjsonfieldsfor