web-dev-qa-db-fra.com

Initialisation d'un dictionnaire dans python avec une valeur de clé et aucune valeur correspondante

Je me demandais s'il existait un moyen d'initialiser un dictionnaire dans python avec des clés, mais aucune valeur correspondante jusqu'à ce que je les définisse. Tel que:

Definition = {'Apple': , 'ball': }

et puis plus tard, je peux les définir:

Definition[key] = something

Je veux seulement initialiser les clés mais je ne connais pas les valeurs correspondantes avant de devoir les définir plus tard. Fondamentalement, je sais quelles clés je veux ajouter les valeurs telles qu'elles sont trouvées. Merci.

57
user2989027

Vous pouvez les initialiser à None.

55
Scott Hunter

Utilisez la fonction fromkeys pour initialiser un dictionnaire avec une valeur par défaut. Dans votre cas, vous initialiserez avec None puisque vous n'avez pas de valeur par défaut à l'esprit.

empty_dict = dict.fromkeys(['Apple','ball'])

cela initialisera empty_dict comme:

empty_dict = {'Apple': None, 'ball': None}

Si vous souhaitez initialiser le dictionnaire avec une valeur par défaut autre que None, vous pouvez également effectuer les opérations suivantes:

default_value = 'xyz'
nonempty_dict = dict.fromkeys(['Apple','ball'],default_value)
70
codegeek

vous pouvez utiliser un defaultdict. Cela vous permettra de définir les valeurs du dictionnaire sans vous soucier de savoir si la clé existe déjà. Si vous accédez à une clé qui n'a pas encore été initialisée, elle retournera une valeur que vous spécifiez (dans l'exemple ci-dessous, elle renverra Aucune)

from collections import defaultdict
your_dict = defaultdict(lambda : None)
8
Hammer

Il serait bon de savoir quel est votre but, pourquoi vous souhaitez initialiser les clés. Je ne suis pas sûr que vous ayez besoin de le faire du tout.

1) Si vous voulez compter le nombre d'occurrences de clés, vous pouvez simplement faire:

Definition = {}
# ...
Definition[key] = Definition.get(key, 0) + 1

2) Si vous souhaitez obtenir ultérieurement aucune (ou une autre valeur) pour les clés que vous n'avez pas rencontrées, vous pouvez à nouveau utiliser la méthode get ():

Definition.get(key)  # returns None if key not stored
Definition.get(key, default_other_than_none)

3) À toutes autres fins, vous pouvez simplement utiliser une liste des clés attendues et vérifier si les clés trouvées ultérieurement correspondent à celles-ci.

Par exemple, si vous souhaitez uniquement stocker des valeurs pour ces clés:

expected_keys = ['Apple', 'banana']
# ...
if key_found in expected_keys:
    Definition[key_found] = value

Ou si vous voulez vous assurer que toutes les clés attendues ont été trouvées:

assert(all(key in Definition for key in expected_keys))
6
user2443147

Vous pouvez initialiser les valeurs sous forme de chaînes vides et les compléter ultérieurement, au fur et à mesure de leur découverte.

dictionary = {'one':'','two':''}
dictionary['one']=1
dictionary['two']=2
4
creggnog
q = input("Apple")
w = input("Ball")
Definition = {'Apple': q, 'ball': w}
2
Aktufono

Basé sur le commentaire éclairant de @ user2989027, je pense qu'une bonne solution est la suivante:

definition = ['Apple', 'ball']
data = {'orange':1, 'pear':2, 'Apple':3, 'ball':4}
my_data = {}
for k in definition:
  try:
    my_data[k]=data[k]
  except KeyError:
    pass
print my_data

J'ai essayé de ne rien faire d'extraordinaire ici. Je configure mes données et un dictionnaire vide. Je parcours ensuite une liste de chaînes qui représentent des clés potentielles dans mon dictionnaire de données. Je copie chaque valeur des données dans my_data, mais considérons le cas où les données peuvent ne pas avoir la clé que je veux.

0
Robert Lugg