我发现我经常使用这种模式:
os.path.join(os.path.dirname(__file__), file_path)
Run Code Online (Sandbox Code Playgroud)
所以我决定在一个包含许多这样小工具的文件中放入一个函数:
def filepath_in_cwd(file_path):
return os.path.join(os.path.dirname(__file__), file_path)
Run Code Online (Sandbox Code Playgroud)
问题是,__file__返回当前文件,因此返回当前文件夹,我错过了重点.我可以做这个丑陋的黑客(或者只是按原样编写模式):
def filepath_in_cwd(py_file_name, file_path):
return os.path.join(os.path.dirname(py_file_name), file_path)
Run Code Online (Sandbox Code Playgroud)
然后对它的调用将如下所示:
filepath_in_cwd(__file__, "my_file.txt")
Run Code Online (Sandbox Code Playgroud)
但是我更喜欢它,如果我有办法获得__file__堆栈中一级的功能.有没有办法做到这一点?
我需要构建一个像这样的数据结构:
{
key: {k: v for k in range(fixed_small_number)}
for key in range(fixed_large_number)
}
Run Code Online (Sandbox Code Playgroud)
问题是我正在以"不拘一格"的方式构建它,每次获得一个项目随机k放入一个随机密钥,即我需要随机访问,我需要内部字典是可变的.
所以我的问题分为两个:
外部字典的推荐类型.
内部字典的推荐类型.
对我来说,"最好的"解决方案是一系列可变的命名元组,只有这个不存在.
我可以使用一个namedtuples列表,然后使用新数据重新创建每个,但这听起来非常浪费,列表不是随机访问高效的,并且所有重写都是相同的数据.
我不知道有一些神奇的新结构吗?
编辑:用法示例:
for key, k, v in [('a', 1, 2), ('b', 1, 3), ('a', 2, 1), ('a', 3, 1), ('b', 3, 1) ...]:
my_structre[key][k] = v
Run Code Online (Sandbox Code Playgroud)
EDIT2:
事实证明,列表实际上支持随机访问