python - Python - 参数中有两个相同的函数
问题描述
我正在尝试将两个参数(KeepDuplicates 和 OrderDic)传递给 Object_pairs_hooks,但不知道这样做的 pythonic 方式,有人可以帮忙吗?
raw_data = json.loads(json_value, object_pairs_hook=KeepDuplicates, object_pairs_hook=OrderedDict)
KeepDuplicates - 允许重复的 JSON 键
OrderDic - 应该按照与输入 JSON 相同的顺序组织 JSON
谢谢!!
解决方案
json.loads
创建一个键/值对列表,默认操作是应用dict
并返回它。 object_pairs_hook
对列表执行任何您想要的操作,而不是dict
.
如果您设置object_pairs_hook
为lambda x: x
(仅按原样返回每个元素),它将仅按读取顺序返回 key_value 对的列表。
>>> 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)]
推荐阅读
- r - 在 Rmd 中获取文件时遇到问题
- java - 当记录存在时,结果集返回空。语句在控制台中执行时有效,而不是在代码中。为什么?
- sql - 有没有办法在没有唯一性的情况下防止插入特定情况?
- excel - 将多个工作表从一个工作簿复制到一个新工作簿,但复制值而不是公式。然后在当前目录中保存为今天的日期
- javascript - 在 Django 中使用 jquery 在 for 循环中刷新内容
- php - 运行导入脚本后 503 服务暂时不可用
- powershell - 将 .bat 转换为 .ps1 以自动化 vbs 以运行 SAS EG 报告
- flutter - 为什么在 Dart 中没有 await 关键字的异步关键字函数?
- flutter - 无法重新创建此浮动小部件
- c++ - 即使我在没有调试的情况下运行控制台窗口也会立即关闭