Search for a key in a nested Python dictionary

后端 未结 2 1514
感情败类
感情败类 2020-11-27 06:54

I have some Python dictionaries like this:

A = {id: {idnumber: condition},.... 

e.g.

A = {1: {11 : 567.54}, 2: {14 : 123.1         


        
相关标签:
2条回答
  • You're close.

    idnum = 11
    # The loop and 'if' are good
    # You just had the 'break' in the wrong place
    for id, idnumber in A.iteritems():
        if idnum in idnumber.keys(): # you can skip '.keys()', it's the default
           calculate = some_function_of(idnumber[idnum])
           break # if we find it we're done looking - leave the loop
        # otherwise we continue to the next dictionary
    else:
        # this is the for loop's 'else' clause
        # if we don't find it at all, we end up here
        # because we never broke out of the loop
        calculate = your_default_value
        # or whatever you want to do if you don't find it
    

    If you need to know how many 11s there are as keys in the inner dicts, you can:

    idnum = 11
    print sum(idnum in idnumber for idnumber in A.itervalues())
    

    This works because a key can only be in each dict once so you just have to test if the key exits. in returns True or False which are equal to 1 and 0, so the sum is the number of occurences of idnum.

    0 讨论(0)
  • 2020-11-27 07:30

    dpath to the rescue.

    http://github.com/akesterson/dpath-python

    dpath lets you search by globs, which will get you what you want.

    $ easy_install dpath
    >>> for (path, value) in dpath.util.search(MY_DICT, '*/11', yielded=True):
    >>> ... # 'value' will contain your condition; now do something with it.
    

    It will iterate out all of the conditions in the dictionary, so no special looping constructs required.

    See also

    • how do i traverse nested dictionaries (python)?
    • How to do this - python dictionary traverse and search
    • Access nested dictionary items via a list of keys?
    • Find all occurrences of a key in nested python dictionaries and lists
    • Traverse a nested dictionary and get the path in Python?
    • Find all the keys and keys of the keys in a nested dictionary
    • Searching for keys in a nested dictionary
    • Python: Updating a value in a deeply nested dictionary
    • Is there a query language for JSON?
    • Chained, nested dict() get calls in python
    0 讨论(0)
提交回复
热议问题