Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 递归调用仅用于内部_dep中的键值,或跳过跳过列表中的键值_Python - Fatal编程技术网

Python 递归调用仅用于内部_dep中的键值,或跳过跳过列表中的键值

Python 递归调用仅用于内部_dep中的键值,或跳过跳过列表中的键值,python,Python,我有以下递归调用internal_dep中每个值的代码,有没有一种方法可以将函数调用更改为只调用internal_dep中的键,或者跳过对skip list中键的调用 internal_dep = {'313115': ['313113'], '313117': ['313115'], '313137': ['313136'], '313136': ['313119'], '313119': ['313118'], '313118': ['313117']} mainlist = ['31313

我有以下递归调用internal_dep中每个值的代码,有没有一种方法可以将函数调用更改为只调用internal_dep中的键,或者跳过对skip list中键的调用

internal_dep = {'313115': ['313113'], '313117': ['313115'], '313137': ['313136'], '313136': ['313119'], '313119': ['313118'], '313118': ['313117']}
mainlist = ['313137', '317152' , '314449']
skip = ['313113']

def _getdep(item):
    local_list, temp_list = [], []
    temp_list.extend(internal_dep[item])
    local_list.extend(temp_list)
    for new_item in temp_list:
        local_list.extend(_getdep(new_item))
    return local_list

build_dep_list = []
for item in mainlist:
    build_dep_list.append(item)
    build_dep_list.extend(_getdep(item))

print build_dep_list
错误:-

Traceback (most recent call last):
  File "test.py", line 16, in <module>
    build_dep_list.extend(_getdep(item))
  File "test.py", line 10, in _getdep
    local_list.extend(_getdep(new_item))
  File "test.py", line 10, in _getdep
    local_list.extend(_getdep(new_item))
  File "test.py", line 10, in _getdep
    local_list.extend(_getdep(new_item))
  File "test.py", line 10, in _getdep
    local_list.extend(_getdep(new_item))
  File "test.py", line 10, in _getdep
    local_list.extend(_getdep(new_item))
  File "test.py", line 10, in _getdep
    local_list.extend(_getdep(new_item))
  File "test.py", line 6, in _getdep
    temp_list.extend(internal_dep[item])
KeyError: '313113'

EXPECTED OUTPUT:-
['313115', '313113', '313117','313137','313136','313119','313118','313117']
回溯(最近一次呼叫最后一次):
文件“test.py”,第16行,在
构建dep列表。扩展(_getdep(项))
文件“test.py”,第10行,在_getdep中
本地列表。扩展(_getdep(新项目))
文件“test.py”,第10行,在_getdep中
本地列表。扩展(_getdep(新项目))
文件“test.py”,第10行,在_getdep中
本地列表。扩展(_getdep(新项目))
文件“test.py”,第10行,在_getdep中
本地列表。扩展(_getdep(新项目))
文件“test.py”,第10行,在_getdep中
本地列表。扩展(_getdep(新项目))
文件“test.py”,第10行,在_getdep中
本地列表。扩展(_getdep(新项目))
文件“test.py”,第6行,在_getdep中
临时列表扩展(内部部门[项目])
键错误:“313113”
预期产出:-
['313115', '313113', '313117','313137','313136','313119','313118','313117']

我会将_getdep函数修改为如下内容:

def _getdep(item):
    final_dep = []
    dep = internal_dep.get(item, [])
    final_dep.extend(internal_dep.get(item, []))
    for i in [d for d in dep if d not in skip]:
        final_dep.extend(_getdep(i))
    return final_dep
有关internal_dep.get(item,[])的使用,请参见:(它返回internal_dep[item]的值,或者如果没有这样的键,则返回空列表)
输出:

['313137', '313136', '313119', '313118', '313117', '313115', '313113', '317152', '314449']

你的意思是只调用
mainlist
中的键,并跳过
skip
list中的键?@AshwiniChaudhary-是的,调用mainlist中的键及其依赖项,只调用internal\u dep中提到的键查看我编辑的解决方案。-感谢您的输入。。但我的输出是正确的,在您的输出“313113”中缺少…仍需要打印…谢谢,我修改了它。在您的问题中,您使用
build\u dep\u list.append(item)
。然后“317152”和“314449”必须在输出中。您在该部分是正确的,但您的输出缺少“313113”不再,我已对其进行了修改(这是末尾的第三个条目)这与您提供的原始条目有何不同..我为原始条目创建了一个粘贴链接…两者都提供相同的输出/