简单的Python问题,但我正在摸索着回答问题!Python:检索任意字典路径并修改数据?
我有称为path
任意长度的字符串数组,像这样:
path = ['country', 'city', 'items']
我也有一个字典,data
,和一个字符串,unwanted_property
。我知道字典具有任意深度,并且字典一直向下,除了items
属性,它总是一个数组。
[澄清:这个问题的关键是我不知道path
的内容是什么。他们可能是任何东西。我也不知道字典会是什么样子。我需要沿着路径指示走下字典,然后从那里删除不需要的属性,而不事先知道路径的样子,或者它将会有多长。]
我想检索与path
匹配的数据对象的部分(如果有),然后从每个对象中删除unwanted_property
。
因此,在上面的例子中,我想检索:
data['country']['city']['items']
从每个阵列中的项目的
,然后删除unwanted_property
。我想修改原始数据,而不是副本。 (澄清:我的意思是,我想用最初的字典结尾,只是减去不需要的属性。)
我该如何在代码中执行此操作?
我走了这么远:
path = ['country', 'city', 'items']
data = {
'country': {
'city': {
'items': [
{
'name': '114th Street',
'unwanted_property': 'foo',
},
{
'name': '8th Avenue',
'unwanted_property': 'foo',
},
]
}
}
}
for p in path:
if p == 'items':
data = [i for i in data[p]]
else:
data = data[p]
if isinstance(data, list):
for d in data:
del d['unwanted_property']
else:
del data['unwanted_property']
的问题是,这并没有修改原始数据。它也依赖于items
始终是路径中的最后一个字符串,这可能并非总是如此。
澄清:我的意思是,我想直到结束:
{
'country': {
'city': {
'items': [
{
'name': '114th Street'
},
{
'name': '8th Avenue'
},
]
}
}
}
而我在data
有可用的只有[{'name': '114th Street'}, {'name': '8th Avenue'}]
。
我觉得我需要像XPath这样的字典。
当你说它不修改原始数据,你的意思是? '数据'没有改变? –
@COLDSPEED我的意思是'data'现在只有'[{'name':'114th Street'},{'name':'8th Avenue'}]'而我希望它是完整的字典,只是减去不需要的财产。 – Richard
将一个新的变量'temp'指定给'data',然后用'temp'完成确切的事情。 –