String 如何在Python3中将字典对象转换为字符串

String 如何在Python3中将字典对象转换为字符串,string,python-3.x,dictionary,converter,String,Python 3.x,Dictionary,Converter,我有嵌套字典,我需要把这条字典串起来 字典示例 数据={ “过滤器”:{ “操作员”:“和”, “过滤器”:[{ “操作员”:“或”, “过滤器”:[{ “操作员”:“和”, “过滤器”:[{ “值”:“蓝色” }, { “值”:“绿色” }] }, { “操作员”:“和”, “过滤器”:[{ “值”:“棕色” }, { “值”:“绿色” }] }, { “值”:“绿色” }] }, { “值”:“红色” }] } }您可以这样做 def dict2str(d): if 'value'

我有嵌套字典,我需要把这条字典串起来

字典示例

数据={
“过滤器”:{
“操作员”:“和”,
“过滤器”:[{
“操作员”:“或”,
“过滤器”:[{
“操作员”:“和”,
“过滤器”:[{
“值”:“蓝色”
}, {
“值”:“绿色”
}]
}, {
“操作员”:“和”,
“过滤器”:[{
“值”:“棕色”
}, {
“值”:“绿色”
}]
}, {
“值”:“绿色”
}]
}, {
“值”:“红色”
}]
}

}
您可以这样做

def dict2str(d):
    if 'value' in d:
        return d['value']
    elif 'operator' in d and 'filters' in d:
        return '(' + (" " + d['operator'].upper() + " ").join(map(dict2str, d['filters'])) + ')'
    else:
        raise Exception('invalid dictionary')
基本上是递归地遍历字典并返回每个节点的字符串表示形式。要简化第二个
if
,这里有一个更明确的等效代码:

def dict2str(d):
    if 'value' in d:
        return d['value']
    elif 'operator' in d and 'filters' in d:

        operator = " " + d['operator'].upper() + " "

        filters = []
        for filt in d['filters']:
            filters.append(dict2str(filters))

        ret = ""
        ret += "("
        ret += operator.join(filters)
        ret += ")"

        return ret
    else:
        raise Exception('invalid dictionary')

“而不是红色”
部分让我感到困惑,但我希望这有助于您可以这样做

def dict2str(d):
    if 'value' in d:
        return d['value']
    elif 'operator' in d and 'filters' in d:
        return '(' + (" " + d['operator'].upper() + " ").join(map(dict2str, d['filters'])) + ')'
    else:
        raise Exception('invalid dictionary')
基本上是递归地遍历字典并返回每个节点的字符串表示形式。要简化第二个
if
,这里有一个更明确的等效代码:

def dict2str(d):
    if 'value' in d:
        return d['value']
    elif 'operator' in d and 'filters' in d:

        operator = " " + d['operator'].upper() + " "

        filters = []
        for filt in d['filters']:
            filters.append(dict2str(filters))

        ret = ""
        ret += "("
        ret += operator.join(filters)
        ret += ")"

        return ret
    else:
        raise Exception('invalid dictionary')

“而非红色”
部分让我感到困惑,但我希望这能有所帮助

标题中的问题有误导性,有无数种方法可以将字典显示为字符串,您希望转换特定的字典结构来表示逻辑运算为什么最后是
而不是红色
?我在您的结构中没有看到否定运算符。@Nicolás,因为AND NOT red表示搜索任何不包含的字段red@PyDroid但你的生活中没有“不”dictionary@AntiMatterDynamite真的,你是对的,我在“mean”示例中使用了新的dict{'value':“red','mean':'notcontains','field':'field_name'},在'mean'示例中:contains,notcontains,equal,不相等,等等标题中的问题有误导性,有无限种方式将字典显示为字符串,您希望转换特定的字典结构来表示逻辑运算为什么
而不是末尾的红色
?我在您的结构中没有看到否定运算符。@Nicolás,因为AND NOT red表示搜索任何不包含的字段red@PyDroid但你的生活中没有“不”dictionary@AntiMatterDynamite真的,你是对的,我在“mean”示例中使用了新的dict{'value':“red','mean':'notcontains','field':'field_name'},在'mean'示例中:contains,notcontains,equal,不平等等