Get key by value in dictionary

后端 未结 30 2190
北恋
北恋 2020-11-21 06:28

I made a function which will look up ages in a Dictionary and show the matching name:

dictionary = {\'george\' : 16, \'amber\' : 19}
search_age          


        
相关标签:
30条回答
  • 2020-11-21 07:05
    a = {'a':1,'b':2,'c':3}
    {v:k for k, v in a.items()}[1]
    

    or better

    {k:v for k, v in a.items() if v == 1}
    
    0 讨论(0)
  • 2020-11-21 07:05

    You can get key by using dict.keys(), dict.values() and list.index() methods, see code samples below:

    names_dict = {'george':16,'amber':19}
    search_age = int(raw_input("Provide age"))
    key = names_dict.keys()[names_dict.values().index(search_age)]
    
    0 讨论(0)
  • 2020-11-21 07:05

    Cat Plus Plus mentioned that this isn't how a dictionary is intended to be used. Here's why:

    The definition of a dictionary is analogous to that of a mapping in mathematics. In this case, a dict is a mapping of K (the set of keys) to V (the values) - but not vice versa. If you dereference a dict, you expect to get exactly one value returned. But, it is perfectly legal for different keys to map onto the same value, e.g.:

    d = { k1 : v1, k2 : v2, k3 : v1}
    

    When you look up a key by it's corresponding value, you're essentially inverting the dictionary. But a mapping isn't necessarily invertible! In this example, asking for the key corresponding to v1 could yield k1 or k3. Should you return both? Just the first one found? That's why indexof() is undefined for dictionaries.

    If you know your data, you could do this. But an API can't assume that an arbitrary dictionary is invertible, hence the lack of such an operation.

    0 讨论(0)
  • 2020-11-21 07:11

    Here, recover_key takes dictionary and value to find in dictionary. We then loop over the keys in dictionary and make a comparison with that of value and return that particular key.

    def recover_key(dicty,value):
        for a_key in dicty.keys():
            if (dicty[a_key] == value):
                return a_key
    
    0 讨论(0)
  • 2020-11-21 07:12
    mydict = {'george': 16, 'amber': 19}
    print mydict.keys()[mydict.values().index(16)]  # Prints george
    

    Or in Python 3.x:

    mydict = {'george': 16, 'amber': 19}
    print(list(mydict.keys())[list(mydict.values()).index(16)])  # Prints george
    

    Basically, it separates the dictionary's values in a list, finds the position of the value you have, and gets the key at that position.

    More about keys() and .values() in Python 3: How can I get list of values from dict?

    0 讨论(0)
  • 2020-11-21 07:14
    for name in mydict:
        if mydict[name] == search_age:
            print(name) 
            #or do something else with it. 
            #if in a function append to a temporary list, 
            #then after the loop return the list
    
    0 讨论(0)
提交回复
热议问题