繁体   English   中英

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

[英]transform value of all keys in dict with value matching condition

给出一个像下面这样的字典

{'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] 与上述数据匹配的示例键是 - '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'}]}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM