Python 在不一致列表字典中循环

Python 在不一致列表字典中循环,python,for-loop,dictionary,Python,For Loop,Dictionary,我正在解析xml并将其转换为字典。 在我的字典旁边会是这样的 'directories': {'dirname': 'D:\\directory\\subdir'}, 或 如何循环浏览这本词典。 目前,我正在这样做,只有当它有多个元素时,它才能很好地工作。我应该通过循环检查dirname是元素列表还是元素列表?或者有什么类似于蟒蛇的方法来实现这一点 rules = [] for v in args["directories"]["dirname"]: rules.append(os.p

我正在解析xml并将其转换为字典。 在我的字典旁边会是这样的

'directories': {'dirname': 'D:\\directory\\subdir'},

如何循环浏览这本词典。 目前,我正在这样做,只有当它有多个元素时,它才能很好地工作。我应该通过循环检查dirname是元素列表还是元素列表?或者有什么类似于蟒蛇的方法来实现这一点

rules = []
for v in args["directories"]["dirname"]:
    rules.append(os.path.join(v, "*", "*"))
输出: 对于输入“目录”:{“目录名”:['D:\\directory1\\subdir1', 'D:\\directory2\\subdir2']},

对于输入'directories':{'dirname':'D:\\directory\\subdir'}

请将我视为python新手

您可以检查args[directories][dirname]的类型并相应地处理:

rules = []
dirnames = args["directories"]["dirname"]
if isinstance(dirnames, basestring):
    rules.append(os.path.join(dirnames, "*", "*"))
elif isinstance(dirnames, list):
    for v in dirnames:
        rules.append(os.path.join(v, "*", "*"))

如果我想为'String'和'list'类型调用相同的函数,该怎么办?这不是一个冗余代码吗?@debianese啊,我明白了,再检查一下我的答案。您不会有多余的代码,因为每种情况需要不同的行为。
  rules[] = ['D:\\directory1\\subdir1\\*\\*', 'D:\\directory1\\subdir1\\*\\*']
['D\\*\\*', ':\\*\\*', '\\*\\*', 'd\\*\\*', 'i\\*\\*', 'r\\*\\*', 'e\\*\\*', 'c\\*\\*', 't\\*\\*', 'o\\*\\*', 'r\\*\\*', 'y\\*\\*', '\\*\\*', 's\\*\\*', 'u\\*\\*', 'b\\*\\*', 'd\\*\\*', 'i\\*\\*', 'r\\*\\*']
rules = []
dirnames = args["directories"]["dirname"]
if isinstance(dirnames, basestring):
    rules.append(os.path.join(dirnames, "*", "*"))
elif isinstance(dirnames, list):
    for v in dirnames:
        rules.append(os.path.join(v, "*", "*"))