我确定这样的问题存在于此处,但我似乎无法找到它。我有以下字典query
:
query = {'day': 0, 'item': 'Chipotle'}
一个映射字典:
day_mapping = {0:2, 1:3, 2:4, 3:5, 4:6, 5:7, 6:1}
我需要覆盖query
以根据映射生成以下字典:
query = {'day': 2, 'item': 'Chipotle'}
注意query
可能包含也可能不包含密钥day
,因此以下内容不会返回错误:
query = {'item': 'Chipotle'}
到目前为止,我已经提出了这个问题,但是使用列表理解还是一个更好的方法:
for k, v in query.items():
if k == 'day':
query[k] = day_mapping[v]
这样做的原因是对于python的calendar
库和MongoDB的aggregation
框架,天数的数字表示是不同的。有点烦人,但我确定这种情况发生在各处。
答案 0 :(得分:3)
只需try
即可替换它。这避免了一次不必要的散列(与使用if 'day' in query:
相比)或循环遍历字典并遵循Pythons EAFP principle:
try:
query['day'] = day_mapping[query['day']]
except KeyError:
pass
答案 1 :(得分:0)
您可以使用dict.get(..)
检查'day'
中是否存在dict
密钥:
query = {'day': 0, 'item': 'Chipotle'}
day_mapping = {0:2, 1:3, 2:4, 3:5, 4:6, 5:7, 6:1}
day = query.get('day') # returns `None` if 'day' key not found in `dict`
if day is not None:
query['day'] = day_mapping[day]
以上示例中query
dict的更新值将为:
{'day': 2, 'item': 'Chipotle'}