gpt4 book ai didi

python - 如何从包含列表的嵌套Python字典中的键中删除符号?

转载 作者:行者123 更新时间:2023-11-30 22:33:28 25 4
gpt4 key购买 nike

我有一个包含以下结构的 n 个 JSON 对象的数据转储:

{
"_id" : {"$numberLong" : "734702956751294464" },
"created_at" : "Mon May 23 11:10:09 +0000 2016",
"entities" : {
"user_mentions" : [ {
"name" : "Thierry Zoller",
"id" : 15589731,
"indices" : [ 3, 17 ],
"screen_name" : "thierryzoller",
"id_str" : "15589731"
} ],
"media" : [ {
"source_status_id" : { "$numberLong" : "734677772963041280" },
"url" : "XXXXX",
"source_user_id_str" : "15589731",
"source_user_id" : 15589731,
"id" : { "$numberLong" : "734677772703019008" },
"type" : "photo",
"id_str" : "734677772703019008"
} ],
"hashtags" : [] },
"favorited" : false,
"in_reply_to_user_id_str" : null,
"extended_entities" : {
"media" : [ {
"source_status_id" : { "$numberLong" : "734677772963041280" },
"media_url_https" : "XXXXX",
"url" : "XXXXX",
"source_user_id_str" : "15589731",
"source_user_id" : 15589731,
"indices" : [ 113, 136 ],
"display_url" : "pic.twitter.com/nO9tw2O4eY",
"id" : { "$numberLong" : "734677772703019008" },
}]
}
}

我想删除“$numberLong”键中的“$”。

以下代码消除了列表外部键的“$”:

def rec_key_replace(obj):
if isinstance(obj, Mapping):
return {key.replace('$', ''): rec_key_replace(val) for key, val in obj.items()}
return obj

如何扩展此函数,以便可以从键中删除所有“$”,即使它们位于嵌套列表中(列表也可能包含其他列表等)?

谢谢。

最佳答案

您可以使用递归函数来运行数据结构并替换以 '$' 开头的字典键。

  1. 如果当前对象是一个列表,则递归地遍历它所包含的项目。

  2. 如果对象是字典,则通过使用 '$' 字符设置新键来更新以 '$' 符号开头的键 剥离旧键的弹出值,然后递归字典值以发现嵌套的字典或列表。字符串值将按原样返回。

<小时/>
from pprint import pprint

def replace_keys(obj):
if isinstance(obj, list):
return [<b>replace_keys(x)</b> for x in obj]
elif isinstance(obj, dict):
return {k.lstrip('$') if k.startswith('$') else k: <b>replace_keys(x)</b>
for k, v in obj.items()}
else:
return obj

new_obj = replace_keys(obj)
pprint(new_obj)
<小时/>
{'_id': {'numberLong': '734702956751294464'},
'created_at': 'Mon May 23 11:10:09 +0000 2016',
'entities': {'hashtags': [],
'media': [{'id': {'numberLong': '734677772703019008'},
'id_str': '734677772703019008',
'source_status_id': {'numberLong': '734677772963041280'},
'source_user_id': 15589731,
'source_user_id_str': '15589731',
'type': 'photo',
'url': 'XXXXX'}],
'user_mentions': [{'id': 15589731,
'id_str': '15589731',
'indices': [3, 17],
'name': 'Thierry Zoller',
'screen_name': 'thierryzoller'}]},
'extended_entities': {'media': [{'display_url': 'pic.twitter.com/nO9tw2O4eY',
'id': {'numberLong': '734677772703019008'},
'indices': [113, 136],
'media_url_https': 'XXXXX',
'source_status_id': {'numberLong': '734677772963041280'},
'source_user_id': 15589731,
'source_user_id_str': '15589731',
'url': 'XXXXX'}]},
'favorited': 'false',
'in_reply_to_user_id_str': 'null'}

关于python - 如何从包含列表的嵌套Python字典中的键中删除符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45151628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com