【发布时间】:2019-03-02 18:57:53
【问题描述】:
我有一本由嵌套列表和字典组成的字典。其中一些列表仅包含一个元素:另一个列表。我想保留元素,但我想删除无意义的单元素列表。例如。来自
{'geojson': [{'geometry': {'coordinates': [[[5., 52.],
[5., 52.],
[5., 52.],
]],
'type': 'Polygon'},
'properties': {},
'type': 'Feature'}]},
我想拥有
{'geojson': {'geometry': {'coordinates': [[5., 52.],
[5., 52.],
[5., 52.],
],
'type': 'Polygon'},
'properties': {},
'type': 'Feature'}},
我尝试了一个递归函数。它可以正确识别这些片段,但它会原封不动地返回我的论点。
def eliminate_excessive_nested_lists(x):
if isinstance(x,list):
if len(x) == 1:
x = x[0] #I tried x[:] = x[0] but it works neither
eliminate_excessive_nested_lists(x)
else:
for element in x:
eliminate_excessive_nested_lists(element)
elif isinstance(x,dict):
for key in x.keys():
eliminate_excessive_nested_lists(x[key])
return x
我怎样才能划线 x = x[0] 实际工作? (或找到完全不同的方法)
【问题讨论】:
-
它不需要递归,迭代版本将避免过多的调用开销。我认为问题在于 x 是一个复制的范围变量。您可能需要返回 eleminate_excessive_nested_lists() 才能实际传递值。
标签: python list dictionary recursion