2017-10-09 6 views
1

Y at-il un moyen intégré en Python pour rechercher une clé k dans un dictd et, si la clé n'est pas présent, recherchez-le dans un autre dicte?Rechercher une clé dans une chaîne de dicts Python?

peut-il être étendu à une chaîne arbitrairement longue dict s d =>e =>f => ...?

+0

Est-ce une recherche linéaire entre les dicts? comme il va toujours chercher d d'abord, puis e, puis f .. – Vinny

+0

@Vinny - oui, je voudrais regarder les dicts dans l'ordre. – user200783

Répondre

3

Vous pouvez utiliser un collections.ChainMap:

from collections import ChainMap 

d = ChainMap({'a': 1, 'b': 2}, {'b': 22}, {'c': 3}) 
print(d['c']) 
print(d['b']) 

Cette génèrerait:

 
3 
2 

Notez que la recherche de la clé 'b' a été satisfaite par le premier dictionnaire sur la carte et les dicts restantes où non cherché.

ChainMap a été introduit en Python 3.3

+0

Si vous avez besoin de supporter Python2.7, vous pouvez utiliser le backport: https://pypi.python.org/pypi/chainmap – guettli

1

Peut-être comme ci-dessous:

if k in d: 
    pass 
elif k in e: 
    pass 
elif k in f: 
    ... 
2

Si vous utilisez Python 3.3 <, ChainMap n'est pas disponible.

Cela est moins élégant, mais fonctionne:

a = {1: 1, 2: 2} 
b = {3: 3, 4: 4} 

list_dicts = [a, b] 

def lookup(key): 
    for i in list_dicts: 
     if key in i: 
      return i[key] 
    raise KeyError 

lookup(1) # --> 1 
lookup(4) # --> 4 

Vous ajoutez tous les dicts à une liste, et utiliser une méthode pour regarder par-dessus eux.