目录词典

2024-04-23 19:38:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些路径,如(简化): /根文件夹/子文件夹\u 1/子文件夹\u 1/

paths = {
    'rootFolder':'rootFolder/'
    'subFolder_1':paths[rootFolder]+'subFolder/'
    'subsubFolder_1:paths[subfolder]+'subsubFolder/'
}

基本上,我想要一个静态的路径字典,但是我也想要保持依赖性,这样我就可以在将来只做一个更改。我不确定这是否可行,如果可行,那怎么办?你有比我更好的主意吗? 提前谢谢你的帮助。你知道吗


Tags: 路径文件夹字典静态主意依赖性pathssubfolder
3条回答

可以使用函数作为键的值。因为函数在构造dict之前不会被调用,所以不会有NameError。你知道吗

In [320]: paths = { 'root': lambda: '/', 'usr': lambda: os.path.join(paths['root'](), 'usr')}

In [321]: paths['root']()
Out[321]: '/'

In [322]: paths['usr']()
Out[322]: '/usr'

In [323]: paths['root'] = lambda: '//'

In [324]: paths['usr']()
Out[324]: '//usr'

如果您不想做paths['root'](),只需子类dict。你知道吗

from types import FunctionType
import os

class DynDict(dict):
    def __getitem__(self, key):
        val = dict.__getitem__(self, key)
        return val() if type(val) is FunctionType else val

paths = DynDict(root='/', tmp=lambda: os.path.join(paths['root'], 'tmp'))
print(paths['root'], paths['tmp'])
paths['root'] = '/var/'
print(paths['root'], paths['tmp'])

输出

/ /tmp
/var/ /var/tmp
paths = {
  'rootFolder'    :  "'rootFolder/'",
  'subFolder_1'   :  "eval(paths['rootFolder']) + 'subFolder/'",
  'subsubFolder_1':  "eval(paths['subFolder_1'])+ 'subsubFolder/'"
}

访问方式:

eval(paths["subsubFolder_1"])
# 'rootFolder/subFolder/subsubFolder/'

您可以通过一个函数getPath(“keyindicat”)来封装eval用法,该函数在访问dict时对用户不友好

你可以创建一个函数来返回你想要的字典。你知道吗

def path_dict(root):
    return {'rootFolder':root,
            'subFolder_1':root+'subFolder/'
            'subsubFolder_1:root+'subfolder/subsubFolder/'
           }

那么

>>> path_dict('rootFolder/')
{'subsubfolder_1': 'rootFolder/subfolder/subsubfolder/', 'rootFolder': 'rootFolder/', 'subfolder_1': 'rootFolder/subfolder/'}

如果要使用字典中的键来构建,可以通过以下几个步骤初始化字典来实现。你知道吗

paths = {'rootFolder':'rootFolder/'}
paths['subFolder_1'] = paths['rootFolder']+'subFolder/'

它不是目录的一行实例化,但是您可以将两者结合起来,以获得代码重用较少的一行实例化。你知道吗

def path_dict(root):
    paths = {'rootFolder':root}
    paths['subFolder_1'] = paths['rootFolder']+'subFolder/'
    paths['subsubFolder_1'] = paths['subFolder_1']+'subsubFolder/'

    return paths

相关问题 更多 >