我的情况是某些城市名称需要重命名,所以我使用的是一个字典,其中键是旧的城市名称,值是新的。但是,只有一些城市需要重新命名,因此并非所有可能的城市都在该字典中。
我知道如何做的唯一方法是除了一个KeyError,当城市不需要重命名时,这有效,但我不确定这是不好的做法,还是有任何垮台这个。有什么我想念的吗?
# Set Venue
venue_name = unidecode(cell[2].get_text())
try:
# Correct venue names i.e. Cairns, QLD = Cairns
venue_name = VENUE_NAMES_DICT[venue_name]
except KeyError:
pass
答案 0 :(得分:2)
正如@jarmod建议的那样,您可以使用标准词典的.get()
方法在缺少密钥时提供默认值。没有描述的是,通过将venue_name
值作为默认值传递给.get()
,此方法可以让您将问题转化为单行。
# Set Venue
venue_name = unidecode(cell[2].get_text())
# Correct venue names i.e. Cairns, QLD = Cairns
venue_name = VENUE_NAMES_DICT.get(venue_name, venue_name)
如果venue_name
作为字典中的键存在,.get()
将返回所需的新值。如果不存在,.get()
将返回venue_name
的原始值不变。这消除了对任何条件逻辑的需要。
答案 1 :(得分:0)
你可以做的是使用defaultdict
scope.vars.forEach(function(elem,i){
scope.$watch('vars['+i+']', function(newValue, oldValue) {
// need to access i when the object is changed
});
});
示例:
from collections import defaultdict
d=defaultdict(list) #this will return a empty list everytime a new key is used or if key exists it will appendt the value to the list
d[venue_name]=a
答案 2 :(得分:0)
您可以在"中使用",如下所示:
data = ['Chicago', 'NYC', 'Boston', 'SD']
dictionary = {'NYC': 'New York', 'SD': 'San Diego'}
new_list = []
for x in data:
if x in dictionary:
new_list.append(dictionary[x])
else:
new_list.append(x)
print(new_list)
#output
['Chicago', 'New York', 'Boston', 'San Diego']
使用列表理解
data = ['Chicago', 'NYC', 'Boston', 'SD']
dictionary = {'NYC': 'New York', 'SD': 'San Diego'}
new_list=[dictionary[x] if x in dictionary else x for x in data]
print(new_list)
['Chicago', 'New York', 'Boston', 'San Diego']
答案 3 :(得分:0)
您可以使用dict.get(key,default_value)并提供默认值。
答案 4 :(得分:-1)
一般而言,针对非例外情况抛出异常是设计不佳。你想要一个media/image/my-fancy-image.png
。
defaultdict
现在,from collections import defaultdict
renames = defaultdict(lambda: None)
# Add the elements to renames here ...
是一个字典,但如果该密钥不存在,则返回renames
而不是抛出,因此您只需检查值None
是否可以看到如果需要重命名。