我正在创建动态字典,如下所示:
my_dict = {
"file_name" : ""
}
my_dict = {
"file_name" : "file_1.csv",
"file_path" : "parent/folder/%s" % my_dict["file_name"]
}
我希望my_dict["file_path"]
等于"parent/folder/file_1.csv"
我怎么能意识到这一点? 我正在寻找一种解决方案,只要“ file_name”更新,它就会更新“ file_path”。
答案 0 :(得分:2)
您不能在dict
尚未初始化的同一语句中执行此操作。您可以尝试如下操作:
my_dict = {
"file_name" : "file_1.csv",
}
my_dict["file_path"] = "parent/folder/%s" % my_dict["file_name"]
答案 1 :(得分:0)
您需要编写一个简单的类。我认为,可以同时设置两个属性的属性,同时将file_name
的设置器设置为file_path
,并禁用file_path
的设置器。
但是更好的选择是将目录名和基本名分开,并具有将它们连接在一起的path属性。这是一个简单的示例:
import os
class MyClass:
def __init__(self, dirname, basename):
self.dirname = dirname
self.basename = basename
# This method is not crucial to the example, just nice to add
def __repr__(self):
r = '{}({!r}, {!r})'.format(
self.__class__.__name__,
self.dirname,
self.basename,
)
return r
@property
def path(self):
return os.path.join(self.dirname, self.basename)
c = MyClass('parent/folder', 'file_1.csv')
print(c.path) # -> parent/folder/file_1.csv
c.basename = 'foo.txt'
print(c.path) # -> parent/folder/foo.txt
c.path = 'foo/bar.csv' # -> AttributeError: can't set attribute
如果需要,可以为使用path
的{{1}}添加一个setter并设置os.path.split
和dirname
。