2017-04-17 109 views
2

我确定像这样的问题存在于此处,但我似乎无法找到它。我有以下的字典叫querypython:重写基于单独字典的单个字典密钥

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框架。有点烦人,但我确信这发生在各地。

+1

为什么你循环查询query.items呢?您可以在查询中执行一个简单的'if'天' – Hamms

+2

'如果'天'在查询中:query ['day'] = day_mapping [query ['day']]' –

+0

您可以使用某些方法或者使用EAFP方法。这取决于你期望这种情况有多特殊。如果确实例外,例外就是要走的路。 –

回答

3

只需要try即可取代它。这避免了一个不必要的散列(相对于使用if 'day' in query:)或遍历字典,并遵循蟒蛇EAFP principle

try: 
    query['day'] = day_mapping[query['day']] 
except KeyError: 
    pass 
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字典的值将是:

{'day': 2, 'item': 'Chipotle'}