2015-05-21 19 views
29

Scusate prima del tempo per l'improprio dialetto "linguaggio python" mentre sto ancora imparando la lingua. Sto cercando di far stampare il mio programma "banana" dal dizionario. Quale sarebbe il modo più semplice per farlo?Come trovare la prima 'chiave'? in un dizionario?

EDIT

Non sto cercando di ottenere il mio programma per stampare il valore associato a 'banane' solo per stampare banana con un ciclo FOR, così quando l'eseguo, ogni tasto sarebbe anche stampato.

Questo è il mio dizionario:

prices = { 
    "banana" : 4, 
    "apple" : 2, 
    "orange" : 1.5, 
    "pear" : 3 
} 
+16

dizionari in Python non sono ordinati, quindi non c'è "prima chiave." [Vedi qui] (http://stackoverflow.com/questions/15479928/why-is-the-order-in-python-dictionaries-and-sets-arbitrary) –

+1

Vuoi stampare letteralmente la parola "banana" o il valore associato a "banana" (4, in questo caso)? –

+0

'per stampare la banana con un ciclo FOR, quindi quando lo eseguo, verrà stampato anche ogni tasto' Intendi 'per k nei prezzi: stampa k'? Questo stamperà tutte le chiavi nel dizionario. –

risposta

8

Il tipo dict è una mappatura non ordinata, quindi non c'è cosa come un elemento di "prima".

Quello che vuoi è probabilmente collections.OrderedDict.

+0

o una namedtuple, forse se è immutabile –

-2

Questo è un modo semplice per stampare banana. E 'questo quello che stai cercando?

for key, value in prices.items() : 
    if value == 4: 
     print key 

Naturalmente questo funziona solo se non ci sono altri items nel dizionario con la value4. Se ci sono altri items con la value4, si può fare questo:

for key, value in prices.items() : 
    if value == 4 and key.startswith("banan"): 
     print key 
+0

Sono abbastanza sicuro che questo non è ciò che la domanda è su – Raniz

+0

@Raniz forse hai ragione, puoi farmi sapere di cosa pensi che la domanda riguardi? –

+1

L'OP crede erroneamente che i dizionari abbiano un ordine e stia cercando di ottenere la prima chiave. Se l'OP non è sicuro se c'è anche una chiave 'banana' come potrebbe sapere qual è il valore della chiave? In entrambi i casi, se si desidera semplicemente testare l'esistenza di una chiave, non è necessario eseguire iterazioni su una dict quando è possibile utilizzare semplicemente 'if prices.get ('banana', False)'. – IanAuld

5

Se si desidera stampare tutte le chiavi del dict, scorrere su di esso. Tuttavia, non ti è garantito l'ordine qui, si organizzeranno le dizioni normali, tuttavia pensano che daranno le migliori prestazioni.

for k in prices: 
    print(k) 

Se avete bisogno di tenere le cose in ordine, allora dovete utilizzare un solo un dizionario pianura OrderedDict e non.

import collections 
prices = collections.OrderedDict((
     ("banana", 4), 
     ("apple", 2), 
     ("orange", 1.5), 
     ("pear", 3), 
)) 

Se poi si voleva vedere tutte le chiavi al fine si potrebbe fare in modo scorrendo essa

for k in prices: 
    print(k) 

si potrebbe, in alternativa, mettere tutte le chiavi in ​​una lista e poi lavorare con quello

ks = list(prices) 
print(ks[0]) # will print "banana" 
+0

Grazie per il consiglio. Mi dispiace per non essere più chiaro. Sto solo cercando di trovare il codice che mi permetterà di stampare "Banana" NON il valore associato ad esso. Grazie per tutti gli input! – slagoy

+0

ah, beh allora è così. Potresti anche chiamare '.keys()' su un normale 'dict', ma non c'è alcuna garanzia sull'ordine in cui riceverai le chiavi in ​​ –

0

Come molti altri hanno sottolineato, non esiste un primo valore in un dizionario. L'ordinamento in essi è arbitrario e non si può contare sul fatto che lo smistamento sia lo stesso ogni volta che si accede al dizionario. Tuttavia, se si voleva stampare le chiavi un paio di modi per esso:

for key, value in prices.items(): 
    print(key) 

Questo metodo utilizza l'assegnazione tuple per accedere alla chiave e il valore. Questo è utile se è necessario accedere sia alla chiave che al valore per qualche motivo.

for key in prices.keys(): 
    print(key) 

Questo sarà dà solo l'accesso alle chiavi come metodo keys() implica.

0

utilizzare un ciclo che spazia attraverso tutti i tasti in prices:

for key, value in prices.items(): 
    print key 
    print "price: %s" %value 

Assicurarsi che si cambia prices.items()-prices.iteritems() se si sta utilizzando Python 2.x

29

se si vuole un solo tasto del Dictionnary, questo è probabilmente il più breve Python 2 e 3 codice valido

my_dict = {'foo': 'bar'} 
next(iter(my_dict)) # outputs 'foo' 
8

Un dizionario non è indicizzato, ma sono io in qualche modo, ordinato. Quanto segue ti darà la prima chiave esistente:

list(my_dict.keys())[0] 
-1

d.keys() [0] per ottenere la chiave individuale.

Aggiornamento: - @AlejoBernardin, non sono sicuro del motivo per cui hai detto che non ha funzionato. qui ho controllato e ha funzionato. collezioni di importazione

prices = collections.OrderedDict((

    ("banana", 4), 
    ("apple", 2), 
    ("orange", 1.5), 
    ("pear", 3), 
)) 
prices.keys()[0] 

'banane'

+0

In base al numero di voti, perché questa non è la soluzione migliore? – crackjack

+0

Perché non funziona –

+0

Questo funziona in python2 ma non in python3. In python3, 'dict.keys()' restituisce un oggetto ''dict_keys' invece di un' list', che non supporta l'indicizzazione. – mavix

Problemi correlati