我有一本货币代码字典,每个字典都有一组国家代码。我想用 Regex 搜索特定国家/地区的货币,因此我开始编写一个模式,但目前我所拥有的模式仅在 50% 的时间内有效。这是 Python 中的错误吗?
这是代码。确保至少运行它五到十次,看看它只在某些时候有效。
local_currencies = str({
'GBP': {'UK'},
'USD': {'US'},
'EUR': {'FR', 'DE', 'IT'},
})
country = 'FR'
pattern = fr"'.{{3}}': ?\{{'{country}'"
print(re.search(pattern, local_currencies))
Run Code Online (Sandbox Code Playgroud)
小智 5
失败的原因是因为{'FR', 'DE', 'IT'}是 a set,并且集合没有定义的顺序。当这成功时,这是因为 'FR' 首先出现在字符串表示中。当它失败时,那是因为 'DE' 或 'IT' 先出现。这不是 Python 中的错误。您不能期望从无序集合中获得一致的排序。
我强烈建议您使用不同的方法。依赖 python 对象的字符串表示是非常糟糕的形式。相反,您可以创建一个反向映射,例如country_to_currency = {'FR': 'EUR', 'DE': 'EUR', 'US': 'USD'}. 然后你可以简单地做country_to_currency['FR']。