gpt4 book ai didi

python - 在 Python 3 中操作嵌套字典/列表树

转载 作者:行者123 更新时间:2023-12-01 04:30:48 27 4
gpt4 key购买 nike

我正在尝试使用 pandoc 的 JSON AST 格式。

它的格式如下。

[
{
"unMeta": {
"date": {
"t": "MetaInlines", "c": [
{"t": "Str", "c": "2015-08-23"}]},
"version": {
"t": "MetaString", "c": "0.22"},
"author": {
"t": "MetaInlines", "c": [
{"t": "Str", "c": "John"},
{"t": "Space", "c": []},
{"t": "Str", "c": "MacFarlane"}]},
"title": {
"t": "MetaInlines", "c": [
{"t": "Str", "c": "CommonMark"},
{"t": "Space", "c": []},
{"t": "Str", "c": "Spec"}]},
"license": {
"t": "MetaInlines", "c": [
{"t": "Link", "c": [
[
{"t": "Str", "c": "CC-BY-SA"},
{"t": "Space", "c": []},
{"t": "Str", "c": "4.0"}
],
["http://creativecommons.org/licenses/by-sa/4.0/", ""]]
}
]
}
}
},
[
{"t": "Header", "c": [1, ["introduction", [], []], [
{"t": "Str", "c": "Introduction"}]]},
{"t": "Header", "c": [2, ["what-is-markdown", [], []], [
{"t": "Str", "c": "What"},
{"t": "Space", "c": []},
{"t": "Str", "c": "is"},
{"t": "Space", "c": []},
{"t": "Str", "c": "Markdown?"}]]},
{"t": "Para", "c": [
{"t": "Str", "c": "Markdown"},
{"t": "Space", "c": []},
{"t": "Str", "c": "is"},
{"t": "Space", "c": []},
{"t": "Str", "c": "a"},
{"t": "Space", "c": []},
{"t": "Str", "c": "plain"},
{"t": "Space", "c": []},
{"t": "Str", "c": "text"},
{"t": "Space", "c": []},
{"t": "Str", "c": "format"},
{"t": "Space", "c": []},
{"t": "Str", "c": "for"},
{"t": "Space", "c": []},
{"t": "Str", "c": "writing"},
{"t": "Space", "c": []},
{"t": "Str", "c": "structured"},
{"t": "Space", "c": []},
{"t": "Str", "c": "documents,"},
{"t": "Space", "c": []},
{"t": "Str", "c": "based"},
{"t": "Space", "c": []},
{"t": "Str", "c": "on"},
{"t": "Space", "c": []},
{"t": "Str", "c": "conventions"},
{"t": "Space", "c": []},
{"t": "Str", "c": "used"},
{"t": "Space", "c": []},
{"t": "Str", "c": "for"},
{"t": "Space", "c": []},
{"t": "Str", "c": "indicating"},
{"t": "Space", "c": []},
{"t": "Str", "c": "formatting"},
{"t": "Space", "c": []},
{"t": "Str", "c": "in"},
{"t": "Space", "c": []},
{"t": "Str", "c": "email"},
{"t": "Space", "c": []},
{"t": "Str", "c": "and"},
{"t": "Space", "c": []},
{"t": "Str", "c": "usenet"},
{"t": "Space", "c": []},
{"t": "Str", "c": "posts."},
{"t": "Space", "c": []},
{"t": "Str", "c": "It"},
{"t": "Space", "c": []},
{"t": "Str", "c": "was"},
{"t": "Space", "c": []},
{"t": "Str", "c": "developed"},
{"t": "Space", "c": []},
{"t": "Str", "c": "in"},
{"t": "Space", "c": []},
{"t": "Str", "c": "2004"},
{"t": "Space", "c": []},
{"t": "Str", "c": "by"},
{"t": "Space", "c": []},
{"t": "Str", "c": "John"},
{"t": "Space", "c": []},
{"t": "Str", "c": "Gruber,"},
{"t": "Space", "c": []},
{"t": "Str", "c": "who"},
{"t": "Space", "c": []},
{"t": "Str", "c": "wrote"},
{"t": "Space", "c": []},
{"t": "Str", "c": "the"},
{"t": "Space", "c": []},
{"t": "Str", "c": "first"},
{"t": "Space", "c": []},
{"t": "Str", "c": "Markdown-to-HTML"},
{"t": "Space", "c": []},
{"t": "Str", "c": "converter"},
{"t": "Space", "c": []},
{"t": "Str", "c": "in"},
{"t": "Space", "c": []},
{"t": "Str", "c": "perl,"},
{"t": "Space", "c": []},
{"t": "Str", "c": "and"},
{"t": "Space", "c": []},
{"t": "Str", "c": "it"},
{"t": "Space", "c": []},
{"t": "Str", "c": "soon"},
{"t": "Space", "c": []},
{"t": "Str", "c": "became"},
{"t": "Space", "c": []},
{"t": "Str", "c": "widely"},
{"t": "Space", "c": []},
{"t": "Str", "c": "used"},
{"t": "Space", "c": []},
{"t": "Str", "c": "in"},
{"t": "Space", "c": []},
{"t": "Str", "c": "websites."},
{"t": "Space", "c": []},
{"t": "Str", "c": "By"},
{"t": "Space", "c": []},
{"t": "Str", "c": "2014"},
{"t": "Space", "c": []},
{"t": "Str", "c": "there"},
{"t": "Space", "c": []},
{"t": "Str", "c": "were"},
{"t": "Space", "c": []},
{"t": "Str", "c": "dozens"},
{"t": "Space", "c": []},
{"t": "Str", "c": "of"},
{"t": "Space", "c": []},
{"t": "Str", "c": "implementations"},
{"t": "Space", "c": []},
{"t": "Str", "c": "in"},
{"t": "Space", "c": []},
{"t": "Str", "c": "many"},
{"t": "Space", "c": []},
{"t": "Str", "c": "languages."},
{"t": "Space", "c": []},
{"t": "Str", "c": "Some"},
{"t": "Space", "c": []},
{"t": "Str", "c": "of"},
{"t": "Space", "c": []},
{"t": "Str", "c": "them"},
{"t": "Space", "c": []},
{"t": "Str", "c": "extended"},
{"t": "Space", "c": []},
{"t": "Str", "c": "basic"},
{"t": "Space", "c": []},
{"t": "Str", "c": "Markdown"},
{"t": "Space", "c": []},
{"t": "Str", "c": "syntax"},
{"t": "Space", "c": []},
{"t": "Str", "c": "with"},
{"t": "Space", "c": []},
{"t": "Str", "c": "conventions"},
{"t": "Space", "c": []},
{"t": "Str", "c": "for"},
{"t": "Space", "c": []},
{"t": "Str", "c": "footnotes,"},
{"t": "Space", "c": []},
{"t": "Str", "c": "definition"},
{"t": "Space", "c": []},
{"t": "Str", "c": "lists,"},
{"t": "Space", "c": []},
{"t": "Str", "c": "tables,"},
{"t": "Space", "c": []},
{"t": "Str", "c": "and"},
{"t": "Space", "c": []},
{"t": "Str", "c": "other"},
{"t": "Space", "c": []},
{"t": "Str", "c": "constructs,"},
{"t": "Space", "c": []},
{"t": "Str", "c": "and"},
{"t": "Space", "c": []},
{"t": "Str", "c": "some"},
{"t": "Space", "c": []},
{"t": "Str", "c": "allowed"},
{"t": "Space", "c": []},
{"t": "Str", "c": "output"},
{"t": "Space", "c": []},
{"t": "Str", "c": "not"},
{"t": "Space", "c": []},
{"t": "Str", "c": "just"},
{"t": "Space", "c": []},
{"t": "Str", "c": "in"},
{"t": "Space", "c": []},
{"t": "Str", "c": "HTML"},
{"t": "Space", "c": []},
{"t": "Str", "c": "but"},
{"t": "Space", "c": []},
{"t": "Str", "c": "in"},
{"t": "Space", "c": []},
{"t": "Str", "c": "LaTeX"},
{"t": "Space", "c": []},
{"t": "Str", "c": "and"},
{"t": "Space", "c": []},
{"t": "Str", "c": "many"},
{"t": "Space", "c": []},
{"t": "Str", "c": "other"},
{"t": "Space", "c": []},
{"t": "Str", "c": "formats."}]}]]

如何改变/重新格式化它,以便当 "t""c" 是字典键时,我得到一个更具可读性的字典,其中字典键t是我的新字典的键,'c'的值是我的新字典的值。

成功的结果看起来像这样:

{
"unMeta": {
"date": {
"MetaInlines": [
{"Str": "2015-08-23"}]},
"version": {
"MetaString": "0.22"},
"author": {
"MetaInlines": [
{"Str": "John"},
{"Space": []},
{"Str": "MacFarlane"}]},
"title": {
"MetaInlines": [
{"Str": "CommonMark"},
{"Space": []},
{"Str": "Spec"}]},
"license": {
"MetaInlines": [
{"Link": [
[
{"Str": "CC-BY-SA"},
{"Space": []},
{"Str": "4.0"}
],
["http://creativecommons.org/licenses/by-sa/4.0/", ""]]
}
]
}
}
},

我目前的策略是这样的。在 while 循环内,我进行迭代,直到找到 "t""c" 作为字典的键,然后我在字典上调用包含以下内容的函数:键,它返回一个新字典,将 found 设置为 True 并右移原始字典值,然后让 while 循环运行,直到找不到更多实例。有更好的办法吗?

最佳答案

你的循环将如何检查主列表中的所有字典、这些字典中的所有字典以及每个内部字典中的字典列表等等......?这类问题通常用递归来解决。该函数遍历原始列表中的值。当遇到 {'t':x, 'c':y} 字典时,它会将其更改为 {x: y} 。当遇到任何其他类型的字典或列表时,该函数会在该项目上调用自身。

def mutate(iterable):
if isinstance(iterable, list):
indexed_list = enumerate(iterable)
elif isinstance(iterable, dict):
indexed_list = iterable.items()
for k, item in indexed_list:
if isinstance(item, dict) and sorted(item.keys()) == ['c', 't']:
iterable[k] = {item['t']: item['c']}
if isinstance(item, dict) or isinstance(item, list):
mutate(item)

关于python - 在 Python 3 中操作嵌套字典/列表树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32422245/

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