Python-参数中有两个相同的函数

Python-参数中有两个相同的函数,python,json,Python,Json,我试图将两个参数(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 谢谢 json.load

我试图将两个参数(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


谢谢

json.loads
创建一个键/值对列表,默认操作是对其应用
dict
,并返回它
object\u pairs\u hook
执行列表中的任何操作,而不是
dict

如果将
object\u pairs\u 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())

output=>
[('3',3),('0',0),('1',1),('2',2),('3',3),('4',4)]
您不能传递两个相同的键,但您可以编写一个函数,对传递给它的解码文本调用KeepDuplicates和OrderDic,然后返回结果。然后将该函数传递给对象对,非常感谢!像做梦一样工作!