1
Zhuzhuchenyan 2021-11-04 17:36:13 +08:00
开箱即用的方法应该是不存在的。
要想避免 O(n)的查询复杂度的话,万变不离其宗的方法就是加索引,比较简单的就是加个对于 status 的倒排索引 倒排索引的 key 就是 status 的值,如下例子 [1] => {user1, user2, ...} [2] => {user3, user4, .....} |
2
imn1 2021-11-04 18:10:04 +08:00
1.网上有 nested dict 2 1dim 或者 flatten dict 的代码,我忘了出处了,搜搜吧
转为一维后就容易搜了 2.如果已经知道“路径”,有个包叫 jsonpath ,用类似 xpath 方式搜索 json 3.types 有个类 Simplenamespace ,把 dict[key] 转为 dict.key 形式,不过只能转一层,嵌套就自己写个递归吧 4. json 是字符串,可用正则,这是另类思维 |
3
MoYi123 2021-11-04 19:38:14 +08:00
我有点看不懂你举的例子是怎么样一个数据结构.
python3.10 出的模式匹配,应该能用来做这个. |
4
MoYi123 2021-11-04 19:45:38 +08:00
objs = [
____{"key": "users", "value": {"status": 2}, "name": "openid"}, ____{"key": "users", "value": {"status": 3}, "name": "openid"} ] for obj in objs: ____match obj: ________case {"value": {"status": 2}}: ____________print(obj) |
5
ClericPy 2021-11-04 21:02:43 +08:00
如果猜错了, 那就当我没说
排名有先后 jmespath objectpath jsonpath-rw Jsonpath |
6
dongcidaci 2021-11-05 12:26:31 +08:00 via Android
递归,dfs
|
7
shm7 2021-11-21 18:37:01 +08:00
如果格式固定,为什么不试试 named tuple
|