Python在argumen中有两个相同的函数

2024-10-03 21:34:49 发布

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

我试图传递两个参数(KeepDuplicates和OrderDic)给Object\u pairs\u hooks,但不知道python的方法,有人能帮我吗?你知道吗

 raw_data = json.loads(json_value, object_pairs_hook=KeepDuplicates, object_pairs_hook=OrderedDict)

KeepDuplicates-允许重复的JSON键

OrderDic-应该按照与输入JSON相同的顺序组织JSON

谢谢你!!你知道吗


Tags: 方法jsondata参数rawobjectvaluehook
1条回答
网友
1楼 · 发布于 2024-10-03 21:34:49

json.loads创建键/值对列表,默认操作是对其应用dict并返回它。object_pairs_hook对列表执行任何操作,而不是dict。你知道吗

如果您将object_pairs_hook设置为lambda x: x(只需按原样返回每个元素),它将只返回按读取顺序排列的键值对列表。你知道吗

>>> x = '{"3": 3, "0": 0, "1": 1, "2": 2, "3": 3, "4": 4}'
>>> json.loads(x, object_pairs_hook=lambda el: el)
[('3', 3), ('0', 0), ('1', 1), ('2', 2), ('3', 3), ('4', 4)]

然后,您可以使用已排序的键/值对生成任何类型的对象。这将是一个非常有效的方式来保持秩序和保持重复。除非您正在创建自己的对象,否则我不知道类似字典的类是否接受重复键。列表可能是你最好的选择,也可能是你自己的班级。你知道吗

class SillyClass(object):
    def __init__(self, a_list):
        self._list = a_list[:]
    def show(self):
        return self._list[:]

to_test = json.loads(x, object_pairs_hook=SillyClass)
print(to_test.show())

输出=>;[('3', 3), ('0', 0), ('1', 1), ('2', 2), ('3', 3), ('4', 4)]

相关问题 更多 >