python:重写基于单独字典的单个字典密钥
问题描述:
我确定像这样的问题存在于此处,但我似乎无法找到它。我有以下的字典叫query
:python:重写基于单独字典的单个字典密钥
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
框架。有点烦人,但我确信这发生在各地。
答
只需要try
即可取代它。这避免了一个不必要的散列(相对于使用if 'day' in query:
)或遍历字典,并遵循蟒蛇EAFP principle:
try:
query['day'] = day_mapping[query['day']]
except KeyError:
pass
答
您可以使用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
字典的值将是:
{'day': 2, 'item': 'Chipotle'}
为什么你循环查询query.items呢?您可以在查询中执行一个简单的'if'天' – Hamms
'如果'天'在查询中:query ['day'] = day_mapping [query ['day']]' –
您可以使用某些方法或者使用EAFP方法。这取决于你期望这种情况有多特殊。如果确实例外,例外就是要走的路。 –