Initialiser un dictionnaire en python avec une valeur clé et aucune valeur correspondante

je me demandais s'il y avait un moyen d'initialiser un dictionnaire en python avec des clés mais pas de valeurs correspondantes jusqu'à ce que je les définisse. Tels 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 jusqu'à ce que je doive les définir plus tard. Fondamentalement, je sais quelles clés je veux ajouter les valeurs comme ils sont trouvés. Grâce.

43
demandé sur codegeek 2013-11-19 22:53:25

7 réponses

Vous pourriez initialiser None.

41
répondu Scott Hunter 2013-11-19 18:56:58

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

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

initialiser empty_dict comme:

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

Comme alternative, si vous voulez initialiser le dictionnaire avec une certaine valeur par défaut autre que None, vous pouvez faire:

default_value = 'xyz'
nonempty_dict = dict.fromkeys(['apple','ball'],default_value)
58
répondu codegeek 2015-02-03 15:01:02

vous pourriez utiliser un defaultdict. Il vous permettra de définir des valeurs de dictionnaire sans s'inquiéter 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 ne retournera rien)

from collections import defaultdict
your_dict = defaultdict(lambda : None)
6
répondu Hammer 2013-11-19 19:09:17

Il serait bon de savoir ce que votre but est, pourquoi vous voulez initialiser les touches en premier lieu. Je ne suis pas sûr que vous devez faire.

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

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

2) Si vous voulez obtenir Aucune (ou une autre valeur) plus tard 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) pour tout autre usage, vous pouvez simplement utiliser une liste des les clés attendues, et vérifiez si les clés trouvées plus tard correspondent à celles-ci.

par exemple, si vous voulez seulement 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 ont été trouvés:

assert(all(key in Definition for key in expected_keys))
5
répondu 2014-07-28 23:01:13

Vous pouvez initialiser les valeurs des chaînes vides et les remplir plus tard qu'ils sont trouvés.

dictionary = {'one':'','two':''}
dictionary['one']=1
dictionary['two']=2
4
répondu creggnog 2013-11-19 19:00:18
q = input("Apple")
w = input("Ball")
Definition = {'apple': q, 'ball': w}
2
répondu Aktufono 2017-01-10 23:58:20

basé sur le commentaire de clarification 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 de fantaisiste ici. J'ai paramétré mes données et un dictionnaire vide. Je boucle ensuite à travers 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 à my_data, mais je considère le cas où les données peuvent ne pas avoir la clé que je veux.

0
répondu Robert Lugg 2014-03-18 00:35:54