Python 为什么在使用函数时只打印最后一个元素

Python 为什么在使用函数时只打印最后一个元素,python,function,dictionary,Python,Function,Dictionary,我需要获取业务名称的值,并将其附加到列表中 我需要获取值策略,并在检查父项后附加到列表中 如果父项是营销名称,则必须将其添加到级别1 如果父级为广告名称,则必须将其添加到级别2 如果某个地方的业务是[]我需要传递None而不是空列表 还需要检查密钥是否存在,某些密钥可能会丢失策略、业务 字典在下面 如果列表中包含相同的元素,例如“业务”:['Customer',Customer],则只需使用一个元素 代码如下 def business(searchtest): for el

我需要获取业务名称的值,并将其附加到列表中

  • 我需要获取值策略,并在检查父项后附加到列表中

  • 如果父项是营销名称,则必须将其添加到级别1

  • 如果父级为广告名称,则必须将其添加到级别2

  • 如果某个地方的业务是
    []
    我需要传递
    None
    而不是空列表

  • 还需要检查密钥是否存在,某些密钥可能会丢失策略、业务 字典在下面

  • 如果列表中包含相同的元素,例如
    “业务”:['Customer',Customer]
    ,则只需使用一个元素

  • 代码如下

    def business(searchtest):
        for el in searchtest:
            Business_List = []
            if 'Business' in el['_source']:
                for j in el['_source']['Business']:
                     if 'name' in j:
                        Business_List.append(j['name'])
            else:
                Business_List.extend([])
        return Business_List
                
    def policy(searchtest):
        for el in searchtest:
            level1= []
            if 'policies' in  el['_source']:
                for j in el['_source']['policies']:
                     if 'parent' in j:
                            if 'Marketing' in j['parent']  :
                                level1.append(j['name'])
            else:
                level1.extend([])
    
            level2= []
            if 'policies' in  el['_source']:
                for j in el['_source']['policies']:
                     if 'parent' in j:
                            if 'Advertising' in j['parent']:
                                level2.append(j['name'])
            else:
                level2.extend([])
        return [level1, level2]
    
    def data_product(searchtest):
        resp = []
        for el in searchtest:
            d = {
                    'id'       : el['_source']['id'],
                    'name'     : el['_source']['name'],
                    'Business' : business(searchtest),
    
                    'level1'    : policy(searchtest)[0],
                    'level2'   : policy(searchtest)[1]
    
    
                }
    
        resp.append(d)
        return resp
    
    
    if __name__ == "__main__":
        import pprint
        pp = pprint.PrettyPrinter(4)
        pp.pprint(data_product(searchtest))
    
    
    我的输出

    [   {   'Business': [],
            'id': '101',
            'level1': ['Second division'],
            'level2': ['First division'],
            'name': 'B'}]
    
    预料之外

    [  {   'Business': [],
            'id': '100',
            'level1': ['Second division','First division'],
            'level2': [],
            'name': 'A'},
     {   'Business': ['Customer'],
            'id': '101',
            'level1': ['Second division'],
            'level2': ['First division'],
            'name': 'B'}]
    

    如果
    resp.append(d)
    被放入循环中,那么只有一个id在重复?

    我的整个代码都在更改

    searchtest = [{'_index': 'newtest',
                   '_type': '_doc',
                   '_id': '100',
                   '_score': 1.0,
                   '_source': {'id': '100',
                               'name': 'A',
                               'policies': [{'id': '332',
                                             'name': 'Second division',
                                             'parent': 'Marketing'},
                                            {'id': '3323', 'name': 'First division', 'parent': 'Marketing'}]}},
                  {'_index': 'newtest',
                   '_type': '_doc',
                   '_id': '101',
                   '_score': 1.0,
                   '_source': {'id': '101',
                               'name': 'B',
                               'Business': [{'id': '9'}, {'id': '10', 'name': 'Customer'}],
                               'policies': [{'id': '332',
                                             'name': 'Second division',
                                             'parent': 'Marketing'},
                                            {'id': '3323', 'name': 'First division', 'parent': 'Advertising'}]}}]
    
    
    def business(el):
        Business_List = []
        # for el in searchtest:
        if 'Business' in el['_source']:
            for j in el['_source']['Business']:
                if 'name' in j:
                    Business_List.append(j['name'])
        else:
            Business_List.extend([])
        return Business_List
    
    
    def policy(searchtest):
        for el in searchtest:
            level1 = []
            if 'policies' in el['_source']:
                for j in el['_source']['policies']:
                    if 'parent' in j:
                        if 'Marketing' in j['parent']:
                            level1 .append(j['name'])
            else:
                level1 .extend([])
    
            level2 = []
            if 'policies' in el['_source']:
                for j in el['_source']['policies']:
                    if 'parent' in j:
                        if 'Advertising' in j['parent']:
                            level2.append(j['name'])
            else:
                level2.extend([])
        return [level1, level1 ]
    
    
    def data_product(searchtest):
        resp = []
        for el in searchtest:
            d = {
                'id': el['_source']['id'],
                'name': el['_source']['name'],
                'Business': business(el),
    
                'level1': policy(searchtest)[0],
                'level2': policy(searchtest)[1]
    
            }
    
            resp.append(d)
        return resp
    
    
    if __name__ == "__main__":
        import pprint
    
        pp = pprint.PrettyPrinter(4)
        pp.pprint(data_product(searchtest))
    
    输出:

     [   {   'Business': [],
            'id': '100',
            'level1': ['Second division'],
            'level2': ['First division'],
            'name': 'A'},
        {   'Business': ['Customer'],
            'id': '101',
            'level1': ['Second division'],
            'level2': ['First division'],
            'name': 'B'}]
    

    我不知道在哪里做这件事?如果您向我们显示模拟源代码,请向我们提供具有意外结果的工作示例,以便在本地尝试并调试它。@kirill.z抱歉,我编辑了代码。这是在测试一个
    对应的append(d)
    应该在循环中。添加缩进级别。@Barmar我尝试过,但现在第一个id重复了2次???
    business(searchtest)
    每次通过循环都会返回相同的结果,因为它不依赖于
    el
    。请阅读question@aysh请检查代码,现在它给出了预期的结果
     [   {   'Business': [],
            'id': '100',
            'level1': ['Second division'],
            'level2': ['First division'],
            'name': 'A'},
        {   'Business': ['Customer'],
            'id': '101',
            'level1': ['Second division'],
            'level2': ['First division'],
            'name': 'B'}]