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

时间:2018-11-28 13:31:40

标签: python json dictionary

我的想法很简单,我要寻找的是指针,批评,批评等。

我了解人们可以遍历某些数据类型,这对于任何编程语言都是非常重要的基础。但是,在需要嵌套循环(可能是为了进行比较)的情况下,或者在我的情况下,需要为嵌套循环创建更简单,更整洁的方式,以便在循环中添加下两个可迭代项。

我们知道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的传输之前,if JSONString1 == JSONString2是不合适的选择,因为我需要比较每个JSON字符串中的各个字段,以整理每个JSON字符串版本之间的差异。例如。在版本1和2中,有这些区别,添加了X,删除了Y。

我也了解字典,JSON字符串等都具有直接访问键值(.items())的内置功能,但这通常不适用于嵌套或双嵌套json字符串,您将需要将for循环嵌套到json字符串中nth个嵌套中(如果JSON字符串中有5个嵌套级别,则需要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()

0 个答案:

没有答案