Skip to content Skip to sidebar Skip to footer

List In A Dictionary, Looping In Python

I have the following code: TYPES = {'hotmail':{'type':'hotmail', 'lookup':'mixed', 'dkim': 'no', 'signatures':['|S|Return-Path: postmaster@hotmail.com','|R|^Return-Path:\s*[^@]

Solution 1:

fortype_key, typein TYPES.iteritems():
    forsub_type_key, sub_typeintype.iteritems():
        forsigin sub_type['signatures']:

should be:

fortype_key, typein TYPES.iteritems():
        forsigintype['signatures']:

But 'type' is a poor name choice in this case... you don't want to shadow a builtin.

Essentially, 'type_key' has the name (either 'hotmail' or 'gmail'), and 'type' has the dictionary that is the value associated with that key. So type['signatures'] is what you're wanting.

Also, you may not need to have 'gmail' inside the nested dictionary; just return 'type_key' instead of type['type'].

Bringing it all together, maybe this will work better: (Warning: untested)

providers = {
    'hotmail':{
        'type':'hotmail',
        'lookup':'mixed',
        'dkim': 'no',
        'signatures':[
            '|S|Return-Path: postmaster@hotmail.com',
            '|R|^Return-Path:\s*[^@]+@(?:hot|msn)',
            '^Received: from .*hotmail.com$']
    },
    'gmail':{
        'type':'gmail',
        'lookup':'mixed',
        'dkim': 'yes',
        'signatures':['|S|Subject: unsubscribe','','','']
    }
}

for provider, provider_info in providers.iteritems():
    for sig in provicer_info['signatures']:
        if ("|S|"in sig):
            #String based matching
            clean_sig = sig[3:len(sig)]
            if (clean_sig in file_contents):
                sig_match += 1elif ("|R|"in sig):
            clean_sig = sig[3:len(sig)]
            #REGMATCH laterif (sig_match == sig.count):
        return provider

 returnNone

Post a Comment for "List In A Dictionary, Looping In Python"