How do you find the first key in a dictionary?
I am trying to get my program to print out "banana"
from the dictionary. What would be the simplest way to do this?
This is my dictionary:
prices = {
"banana" : 4,
"apple" : 2,
"orange" : 1.5,
"pear" : 3
}
On a Python version where dicts actually are ordered, you can do
my_dict = {'foo': 'bar', 'spam': 'eggs'}
next(iter(my_dict)) # outputs 'foo'
For dicts to be ordered, you need Python 3.7+, or 3.6+ if you're okay with relying on the technically-an-implementation-detail ordered nature of dicts on Python 3.6.
For earlier Python versions, there is no "first key", but this will give you "a key", especially useful if there is only one.
A dictionary is not indexed, but it is in some way, ordered. The following would give you the first existing key:
list(my_dict.keys())[0]
Update: as of Python 3.7, insertion order is maintained, so you don't need an OrderedDict
here. You can use the below approaches with a normal dict
Changed in version 3.7: Dictionary order is guaranteed to be insertion order. This behavior was an implementation detail of CPython from 3.6.
source
Python 3.6 and earlier*
If you are talking about a regular dict
, then the "first key" doesn't mean anything. The keys are not ordered in any way you can depend on. If you iterate over your dict
you will likely not get "banana"
as the first thing you see.
If you need to keep things in order, then you have to use an OrderedDict
and not just a plain dictionary.
import collections
prices = collections.OrderedDict([
("banana", 4),
("apple", 2),
("orange", 1.5),
("pear", 3),
])
If you then wanted to see all the keys in order you could do so by iterating through it
for k in prices:
print(k)
You could, alternatively put all of the keys into a list and then work with that
ks = list(prices)
print(ks[0]) # will print "banana"
A faster way to get the first element without creating a list would be to call next
on the iterator. This doesn't generalize nicely when trying to get the nth
element though
>>> next(iter(prices))
'banana'
* CPython had guaranteed insertion order as an implementation detail in 3.6.
If you just want the first key from a dictionary you should use what many have suggested before
first = next(iter(prices))
However if you want the first and keep the rest as a list you could use the values unpacking operator
first, *rest = prices
The same is applicable on values by replacing prices
with prices.values()
and for both key and value you can even use unpacking assignment
>>> (product, price), *rest = prices.items()
>>> product
'banana'
>>> price
4
Note: You might be tempted to use
first, *_ = prices
to just get the first key, but I would generally advice against this usage unless the dictionary is very short since it loops over all keys and creating a list for therest
has some overhead.
Note: As mentioned by others insertion order is preserved from python 3.7 (or technically 3.6) and above whereas earlier implementations should be regarded as undefined order.