Een woordenboek in python initialiseren met een sleutelwaarde en geen bijbehorende waarden

Ik vroeg me af of er een manier was om een ​​woordenboek in python te initialiseren met sleutels, maar geen bijbehorende waarden totdat ik ze instelde. Zoals:

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

en dan kan ik ze later instellen:

Definition[key] = something

Ik wil alleen sleutels initialiseren, maar ik weet de bijbehorende waarden pas als ik ze later moet instellen. In principe weet ik welke sleutels ik de waarden wil toevoegen als ze worden gevonden. Bedankt.


Antwoord 1, autoriteit 100%

Je zou ze kunnen initialiseren op None.


Antwoord 2, autoriteit 93%

Gebruik de functie fromkeys om een ​​woordenboek te initialiseren met een standaardwaarde. In uw geval initialiseert u met None omdat u geen standaardwaarde in gedachten heeft.

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

hiermee wordt empty_dict geïnitialiseerd als:

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

Als alternatief, als u het woordenboek wilt initialiseren met een andere standaardwaarde dan None, kunt u het volgende doen:

default_value = 'xyz'
nonempty_dict = dict.fromkeys(['apple','ball'],default_value)

Antwoord 3, autoriteit 17%

je zou een standaarddictaat kunnen gebruiken. Hiermee kunt u woordenboekwaarden instellen zonder u zorgen te maken of de sleutel al bestaat. Als u een sleutel opent die nog niet is geïnitialiseerd, wordt een waarde geretourneerd die u opgeeft (in het onderstaande voorbeeld wordt geen geretourneerd)

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

Antwoord 4, autoriteit 12%

Het zou goed zijn om te weten wat uw doel is, waarom u de sleutels in de eerste plaats wilt initialiseren. Ik weet niet zeker of je dat helemaal moet doen.

1) Als u het aantal keren dat sleutels voorkomen wilt tellen, kunt u het volgende doen:

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

2) Als je later Geen (of een andere waarde) wilt krijgen voor sleutels die je niet bent tegengekomen, kun je opnieuw gewoon de methode get() gebruiken:

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

3) Voor alle andere doeleinden kunt u gewoon een lijst met verwachte sleutels gebruiken en controleren of de gevonden sleutels er later mee overeenkomen.

Als u bijvoorbeeld alleen waarden voor die sleutels wilt opslaan:

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

Of als u zeker wilt weten dat alle verwachte sleutels zijn gevonden:

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

Antwoord 5, autoriteit 6%

Je kunt de waarden initialiseren als lege tekenreeksen en ze later invullen zodra ze worden gevonden.

dictionary = {'one':'','two':''}
dictionary['one']=1
dictionary['two']=2

Antwoord 6, autoriteit 3%

q = input("Apple")
w = input("Ball")
Definition = {'apple': q, 'ball': w}

Antwoord 7, autoriteit 3%

Begrip kan in dit geval ook handig zijn:

# from a list
keys = ["k1", "k2"]
d = {k:None for k in keys}
# or from another dict
d1 = {"k1" : 1, "k2" : 2}
d2 = {k:None for k in d1.keys()}
d2
# {'k1': None, 'k2': None}

Antwoord 8

Op basis van de verhelderende opmerking van @user2989027 denk ik dat een goede oplossing de volgende is:

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

Ik heb geprobeerd hier niets speciaals te doen. Ik stel mijn gegevens en een leeg woordenboek in. Vervolgens loop ik door een lijst met tekenreeksen die potentiële sleutels in mijn datadictionary vertegenwoordigen. Ik kopieer elke waarde van data naar my_data, maar overweeg het geval waarin data misschien niet de sleutel hebben die ik wil.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

twenty − thirteen =

Other episodes