使用值匹配条件转换dict中所有键的值



给定下面这样的dict

{'a': [{'id': 0, 'res': [0, 1]}, {'id': 1, 'res': [8, 9]}], 'b': [{'id': 26, 'f': ('f3', {'nrP': 1})}, {'if': 0, 'f': ('f1', {'init': 6, 'nrS': 14})}], 'c': ('setup', {}), 'd': ('setup', {'max': 'one', 'sim': 'true'}), 'e': [{'id': 8, 'period': ('sl160', 8), 'res': 23}], 'f': [2, 3], 'g': {'f0': 0, 'p0': [{'id': 1, 'Value': -1}], 'ref': [{'id': 0, 'rs': ('abc', 0)}]}}

需要具有值为1的所有键(包括嵌套键(,其中该值是元组&2( 元组中正好有2个元素,并且3(这两个元素都是转换为字符串tuple[0] + ":" + tuple[1]的字符串或数字(不是dict/list或其他数据结构(。

与上面的数据匹配的示例键将是-'period': ('sl160', 8)&'rs': ('abc', 0)

对于上述示例,预期结果如下。

{'a': [{'id': 0, 'res': [0, 1]}, {'id': 1, 'res': [8, 9]}], 'b': [{'id': 26, 'f': ('f3', {'nrP': 1})}, {'if': 0, 'f': ('f1', {'init': 6, 'nrS': 14})}], 'c': ('setup', {}), 'd': ('setup', {'max': 'one', 'sim': 'true'}), 'e': [{'id': 8, 'period': 'sl160 : 8', 'res': 23}], 'f': [2, 3], 'g': {'f0': 0, 'p0': [{'id': 1, 'Value': -1}], 'ref': [{'id': 0, 'rs': 'abc : 0'} ]}}

元组到字符串的转换是可以的。我需要识别与上面条件匹配的嵌套键,并在适当的位置进行转换。

以下内容适用于

def convertTwoElmStrTupleToStr(dictIe):
if isinstance(dictIe, dict):
# base case
for k, v in dictIe.items():
if isinstance(v, tuple) and len(v) == 2 and (isinstance(v[0], str) or isinstance(v[0], int)) and (isinstance(v[1], str) or isinstance(v[1], int)):
dictIe[k] = f'{v[0]} : {v[1]}'
elif isinstance(v, list):
for item in v:
if isinstance(item, dict):
# call base case on each dict
convertTwoElmStrTupleToStr(item)
elif isinstance(v, dict):
# call base case on each dict
convertTwoElmStrTupleToStr(v)
return dictIe

输出

>>> convertTwoElmStrTupleToStr(a)
{'a': [{'id': 0, 'res': [0, 1]}, {'id': 1, 'res': [8, 9]}], 'b': [{'id': 26, 'f': ('f3', {'nrP': 1})}, {'if': 0, 'f': ('f1', {'init': 6, 'nrS': 14})}], 'c': ('setup', {}), 'd': ('setup', {'max': 'one', 'sim': 'true'}), 'e': [{'id': 8, 'period': 'sl160 : 8', 'res': 23}], 'f': [2, 3], 'g': {'f0': 0, 'p0': [{'id': 1, 'Value': -1}], 'ref': [{'id': 0, 'rs': 'abc : 0'}]}}

最新更新