我正在尝试做以下事情:解析音乐文件夹中的所有文件,如果它们在我的收藏夹中,将它们复制到单独的文件夹中。在
为了实现这一点,我用我喜欢的轨迹解析一个xml,并使用这些信息创建一个像这样的定制字典
lovedSongs[artist][title] = 1
当我解析文件夹中的文件时,我从id3标记中读取歌曲标题和艺术家,理论上,我尝试查看lovedSongs[tagArtist][tagTitle]
是否为1
当我试图运行.py文件时,我得到一个dictionary Key Error。我在这里找到了一个潜在的答案:How to make a python dictionary that returns key for keys missing from the dictionary instead of raising KeyError?并像下面那样应用它,但是我仍然得到了密钥错误
class SongDict(dict):
def __init__(self, default=None):
self.default = default
def __getitem__(self, key):
if not self.has_key(key):
self[key] = self.default()
return dict.__getitem__(self, key)
def __missing__(self, key):
return 0
最好的解决方案是什么?使用try/except也许代替简单的if?在
另外,我想我应该提一下,我是python的新手,只有几个小时的“经验”,这是我学习python语言的方法。在
听起来你真正想要的是一个简单的
set
您可以尝试使用
defaultdict
,参数是defaultdict(dict)
。无论何时尝试引用不存在的值,它都不会引发错误,而是返回指定值的默认空值:通过观察单个级别(即“更规则”)
^{pr2}$defaultdict
的工作方式,可以更好地理解defaultdict(lambda: defaultdict(dict))
语法:我们用一个参数}(因为
int
声明了defaultdict
-这意味着如果找不到值,而不是抛出错误,我们将只返回{0
是一个整数的空值)。如果我们使用str
,我们将得到''
,如果我们使用dict
,我们将得到一本字典。然而,这种情况下最棘手的部分是您有一个嵌套字典(defaultdict(dict)
),如果您试图引用嵌套字典中不存在的键,则会遇到相同的问题:因此,为了使我们的嵌套字典也成为}在需要之前被调用。现在,您将拥有一个字典(带有嵌套字典),它将处理两个级别的缺失键,而不会引发错误。希望能解释一下。在
defaultdict
,我们必须做一些技巧:因为defaultdict
的参数是需要可调用的(但尚未调用->;请参见int
与int()
),我们使用一个lambda
函数来模拟这种行为。在一个非常简单的层次上,可以将lambda
看作是阻止{相关问题 更多 >
编程相关推荐