Check if a specific Key and a value exist in a dictionary

前端 未结 3 1227
一整个雨季
一整个雨季 2021-01-16 06:42

I am trying to determine if a specific key and value pair exist in a dictionary; however, if I use the contains or has-key method, it only checks for the key. I need it to c

相关标签:
3条回答
  • 2021-01-16 07:08

    Use

    if key in d and d[key] == value:
    

    Or (only in Python 3)

    if (key, value) in d.items():
    

    In Python 3 d.items() returns a Dictionary view object, which supports fast membership testing. In Python 2 d.items() returns a list, which is both slow to create and slow to to test membership. Python 2.7 is a special case where you can use d.viewitems() and get the same thing that you get with d.items() in Python 3.

    Edit: In a comment you indicate that for performance reasons you prefer checkKeyValuePairExistence over key in d and d[key] == value. Below are some timings showing that checkKeyValuePairExistence is always slower (by about 2x on my system when the key-value pair is present 16x when it is not). I also tested larger and smaller dictionaries and found little variation in the timings.

    >>> import random
    >>> from timeit import timeit
    >>> def checkKeyValuePairExistence(dic, key, value):
    ...     try:
    ...         return dic[key] == value
    ...     except KeyError:
    ...         return False
    ...
    >>> d = {random.randint(0, 100000):random.randint(0, 100000) for i in range(1000)}
    >>> setup = 'from __main__ import k, d, v, checkKeyValuePairExistence'
    >>> test_try_except = 'checkKeyValuePairExistence(d, k, v)'
    >>> test_k_in_d_and = 'k in d and d[k] == v'
    >>> k, v = random.choice(d.items()) # to test if found
    >>> timeit(test_try_except, setup=setup)
    0.1984054392365806
    >>> timeit(test_k_in_d_and, setup=setup)
    0.10442071140778353
    >>> k = -1 # test if not found
    >>> timeit(test_try_except, setup=setup)
    1.2896073903002616
    >>> timeit(test_k_in_d_and, setup=setup)
    0.07827843747497809 
    
    0 讨论(0)
  • 2021-01-16 07:19

    Why not just do this:

    a = {1:'a', 2:'b'}
    b = (1, 'a')
    print b in a.iteritems() # prints True
    
    0 讨论(0)
  • 2021-01-16 07:21

    How about this function:

    def checkKeyValuePairExistence(dic, key, value):
        try:
            return dic[key] == value
        except KeyError:
            return False
    

    If you are using another type of dictionary other then the one python offers (I'm sorry, I couldnt understand from your post if you are using it or not) then let me know and i'll try to give your another solution

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