使用python enumerate()来等同列表元素

时间:2017-06-26 01:45:04

标签: python

我想做一些表格:

for index,value in enumerate('xyz'):
    [x,y,z][index] = [dict1.get(value),dict2.get(value),dict3.get(value)][index]

但当然这不起作用。

我想获取一个输入字符串并将每个字符与字典匹配,然后将相应的字典值分配给变量。考虑以下功能:

def parse_options(options):
    dir_pref,file_pref,name_pref = None,None,None
    for idx,char in enumerate(options):
        # match key characters from input 'options' string to dictionaries
        if char in [dir_options.keys(),file_options.keys(),name_options.keys()][idx]:
            [dir_pref,file_pref,name_pref][idx] = \
            [dir_options.get(char),file_options.get(char),name_options.get(char)][idx]
    return [dir_pref,file_pref,name_pref]

目前,返回(None,None,None)

这是一个重命名脚本。 options是一个字符串对象,其中字符串的第一个字符告诉我的脚本它应该如何遍历目录;第二个字符告诉我的脚本应该如何选择要操作的文件;第三个字符告诉我的脚本应该如何重命名文件。我想将options中的每个字符与相应的字典(dir_optionsfile_optionsname_options分别匹配)并将其对应的字典值分配给三个新变量( dir_preffile_prefname_pref

可能有更好的方法可以解决这个问题,在这种情况下,我很乐意听到建议

1 个答案:

答案 0 :(得分:2)

您无法通过索引列表来选择要分配的变量。分配到[x, y, z][1]不会分配给y;它将列表中的列表单元格分配给刚被丢弃。

而不是你正在做的所有事情,摆脱大部分变量,直接构建返回的列表:

def parse_options(options):
    return [d.get(char)
            for d, char in zip([dir_options, file_options, name_options], options)]

dir_preffile_prefname_pref变量完全没必要。此外,如果密钥不存在,get默认返回None,因此您无需进行明确检查。