简体   繁体   中英

How to iterate values inside dictionary of lists in PYTHON

I have a complicated method that needs to work correctly, that I can't seem to figure out why it doesn't.

I have a dictionary as it follows:

{'view': ['premium_subscribers', 'premium_content'], 'delete': ['admins', 'normal_content', 'premium_content']}

I need to know how to iterate one by one through each specific key values, which are arrays. For example:

key = delete

for loop (that iterates 1 by 1 through key "delete's" values
     
     takes "admins" value and does some processing

     in the next iteration takes normal_content and does same processing

     and so on ......
 
     its basically checking for a match to be found.

In case if you're interested in my method, I have it below. It has 3 dictionaries and is comparing their key's values to accomplish access permission.

If the for loop iterates correctly through each value of that key, it will start working as expected.


def accessPermission(operation, user, object):

domains = dict()
types = dict()
access = dict()

    access = json.load(open("access.txt"))
    domains = json.load(open("domains.txt"))
    types = json.load(open("types.txt"))

    print(types)
    print(access)
    print(domains)

    if operation in access.keys():
        firstkeyvalue = access.get(operation)[0]
        if firstkeyvalue in domains.keys():
            if user in domains.get(firstkeyvalue):
                for access.get(operation)[0] in access:
                    if object in types.values():
                        print("Success")
                else:
                    print("Error: access denied")
            else:
                print("Error: access denied")
        else:
            print("Error: access denied")
    else:
        print("Error: access denied")

Seems you only need to iterate through the elements like this:

dict = {'view': ['premium_subscribers', 'premium_content'], 'delete': ['admins', 'normal_content', 'premium_content']}

key = 'delete' #set somewhere
for v in dict[key]:
  print(v)
  #do what you need with that

Output:

admins
normal_content
premium_content

Each Value is a list , so you need an extra loop for iterating over the items of each list:

data_dict = {'view': ['premium_subscribers', 'premium_content'], 'delete': ['admins', 'normal_content', 'premium_content']}

for key in data_dict:
    
    values = data_dict[key]
    # iterate over list of values
    for v in values:
        
        # Now you have access to each one
        print(v)
    

Output:

premium_subscribers
premium_content
admins
normal_content
premium_content

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM