检查字典键名,它是类的实例

2024-05-02 06:18:59 发布

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

我正在使用一个名为jsondiff的模块来比较两个json文件之间的更改。当检测到更改时,它将返回一个字典。字典键是来自模块的类的实例

根据更改的类型(新添加、删除或更改的内容),字典键的名称不同,但似乎是同一类的实例

我试图检查实例是否等于某种类型的更改。如何编写条件来检查密钥的名称

下面是一个示例:json文件1

[{
    "first": "John",
    "last": "Smith",
    "membership": "general"
},
{
    "first": "Jane",
    "last": "Dogood",
    "membership": "VIP"
}]

json文件2

[{
    "first": "John",
    "last": "Smith",
    "membership": "VIP"
 },
 {
    "first": "Jane",
    "last": "Dogood",
    "membership": "VIP"
 },
 {
    "first": "Robert",
    "last": "Jones",
    "membership": "VIP"
 }]

Python代码

with open("/file1.json") as f1, open("/file2.json") as f2:
    data1 = json.load(f1)
    data2 = json.load(f2)

changes = jsondiff.diff(data1, data2)

for key, val in changes.items():
    print(key, val)
    print(type(key))
    if key == "insert": # also tried "$insert", and insert without quotes
      # Do something

输出:

0 {'membership': 'VIP'}
<class 'int'>
$insert [(2, {'first': 'Robert', 'last': 'Jones', 'membership': 'VIP'})]
<class 'jsondiff.symbols.Symbol'>

Tags: 模块文件实例key名称json类型字典
1条回答
网友
1楼 · 发布于 2024-05-02 06:18:59

简单。键的类型为jsondiff.symbols.Symbol。然而,当它被打印时,我们知道它返回$insert。因此,答案是简单地将密钥包装在str()

if str(key) == "$insert":
    #now we can do something

或者直接去

if key == jsondiff.symbols.insert:
    #do something

insert不是符号类的键。它是jsondiff.symbols脚本的一个属性。实际上,所有符号都是Symbol类的一个实例,因此,直接担心Symbol是浪费时间

jsondiff.symbols.py

相关问题 更多 >