How do you find the first key in a dictionary?

前端 未结 12 793
清酒与你
清酒与你 2020-11-27 10:58

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:

         


        
相关标签:
12条回答
  • 2020-11-27 11:40

    Use a for loop that ranges through all keys in prices:

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

    Make sure that you change prices.items() to prices.iteritems() if you're using Python 2.x

    0 讨论(0)
  • 2020-11-27 11:44

    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.

    0 讨论(0)
  • 2020-11-27 11:51

    So I found this page while trying to optimize a thing for taking the only key in a dictionary of known length 1 and returning only the key. The below process was the fastest for all dictionaries I tried up to size 700.

    I tried 7 different approaches, and found that this one was the best, on my 2014 Macbook with Python 3.6:

    def first_5():
        for key in biased_dict:
            return key
    

    The results of profiling them were:

      2226460 / s with first_1
      1905620 / s with first_2
      1994654 / s with first_3
      1777946 / s with first_4
      3681252 / s with first_5
      2829067 / s with first_6
      2600622 / s with first_7
    

    All the approaches I tried are here:

    def first_1():
        return next(iter(biased_dict))
    
    
    def first_2():
        return list(biased_dict)[0]
    
    
    def first_3():
        return next(iter(biased_dict.keys()))
    
    
    def first_4():
        return list(biased_dict.keys())[0]
    
    
    def first_5():
        for key in biased_dict:
            return key
    
    
    def first_6():
        for key in biased_dict.keys():
            return key
    
    
    def first_7():
        for key, v in biased_dict.items():
            return key
    
    0 讨论(0)
  • 2020-11-27 11:52

    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 the rest 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.

    0 讨论(0)
  • 2020-11-27 11:55

    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]
    
    0 讨论(0)
  • 2020-11-27 11:57

    Well as simple, the answer according to me will be

    first = list(prices)[0]

    converting the dictionary to list will output the keys and we will select the first key from the list.

    0 讨论(0)
提交回复
热议问题