Python 有没有一种方法可以在找到字符串值之前一直为嵌套字典编制索引?

Python 有没有一种方法可以在找到字符串值之前一直为嵌套字典编制索引?,python,dictionary,indexing,Python,Dictionary,Indexing,我正在使用一个dict。它有一些嵌套的dict。看起来是这样的: for keys in outerDict.keys(): if outerDict[keys] has a nested dict: for keys in nestedDict.keys(): nestedDict[keys] = doStuffToString(nestedDict[keys]) else: outerDict[keys] = doStu

我正在使用一个dict。它有一些嵌套的dict。看起来是这样的:

for keys in outerDict.keys():
    if outerDict[keys] has a nested dict:
        for keys in nestedDict.keys():
            nestedDict[keys] = doStuffToString(nestedDict[keys])
    else:
        outerDict[keys] = doStuffToString(outerDict[keys])
如您所见,
教育
经验
都有嵌套的指令<代码>技能、
行业
摘要
只是带有值的键

{
  "education": [
    {
      "start": "1991",
      "major": "Human Resources"
    },
    {
      "start": "1984",
      "major": "Chemistry"
    }
  ],
  "skills": [
    "AML",
    "Relationship Management",
    "Team Management"
  ],
  "industry": "Banking",
  "experience": [
    {
      "org": "Standard Chartered Bank",
      "desc": "text"
    },
    {
      "org": "Tesa Tapes India Pvt. Ltd.",
      "desc": "text",
      "start": "October 1993",
      "title": "Product Manager/Application Engineer"
    }
  ],
  "summary": "text blah blah blah"
}
我需要访问与键
start
major
、来自
skills
industry
org
desc
summary
的字符串列表对应的所有值,以便修改字符串

那么有没有这样的方法来访问这些值:

for keys in outerDict.keys():
    if outerDict[keys] has a nested dict:
        for keys in nestedDict.keys():
            nestedDict[keys] = doStuffToString(nestedDict[keys])
    else:
        outerDict[keys] = doStuffToString(outerDict[keys])
换句话说,继续索引嵌套的dict(如果存在),直到找到字符串值


一个更好的答案可能处理一般情况:嵌套在其他dict中的dict数量可变。也许嵌套的dict有好几层(dict在dict中dict在dict中dict在dict中…直到最后碰到一些字符串/整数)。

您可以使用递归函数

此函数将遍历字典,当它遇到一个列表时,它将遍历该列表中的每个字典,直到找到您要查找的键为止。然后将该条目的值更改为新文本:

def change_all_key_text(输入指令、目标键、新文本):
对于键,输入项()中的val:
如果键==目标键:
输入文本[键]=新文本
elif isinstance(val,列表):
对于val中的新记录:
如果存在(新指令,指令):
更改所有按键文本(新按键、目标按键、新文本)
根据您的评论,如果您希望更改每个字符串,而不考虑键(不包括键本身):

def modify_all_字符串(输入可编辑的新文本):
如果isinstance(输入值,dict):
对于键,输入项中的val_iterable.items():
如果isinstance(val,dict)或isinstance(val,list):
修改所有字符串(val、新文本)
其他:
#在此处更改字符串
输入可编辑[键]=新文本
elif isinstance(输入列表):
对于idx,枚举中的项(可输入):
如果isinstance(项目,目录)或isinstance(项目,列表):
修改所有字符串(项目、新文本)
其他:
#在此处更改字符串
输入\u iterable[idx]=新的\u文本

在这里,您可以通过向dict添加一些结构来获益。由于主dict中每个键的值可以是dict列表、字符串或字符串列表,因此您必须考虑许多输入情况。我不确定您是否已经了解了“典型”或“非典型”,但在这里创建一个节点类并确保每个部分都是一个节点可能会有所帮助。

我认为递归方法可能很好。如果您没有钥匙怎么办?就像在中一样,您希望找到任何和所有字符串,并修改这些字符串,而不管它属于哪个键。或者从另一个角度来看:想象这个系统就像一棵树,字符串就是树叶。你想找到所有的叶子,并对这些叶子做些什么(对所有叶子来说都是一样的),但你不在乎你是如何到达那里的,因此你没有
目标叶子
@HumptyDumpty我已经更新了我的解决方案,以包括这个案例。