AnsweredAssumed Answered

Find specific key-value tuples within a dictionary?

Question asked by jplay on Jan 8, 2015
Latest reply on Jan 9, 2015 by jplay

I am trying to build a process that will check a dictionary for an existing key-value combination within a dictionary where the key is a variable and the value is always going to be one of three different values (16, 17, or 18). I quickly came upon the issue of searching a dictionary with a dictionary and found someone's solution to turn the search into a frozenset. That removed the TypeError: unhashable type: 'dict' error message, but the code is still not doing what I want it to do.


I am trying to identify that a table with 10's of thousands of Building ID's contains exactly 3 occurrences of each Building ID and that each occurrence is accompanied with only either a 16, 17, or 18 value in the next column. So far I've only been playing around with snippets of code to see if I could make it work.


readList = ["BLDG_ID", "HAZARD_ID"]
PassFail = "PASS"
WINDDict = {r[0]:(r[1:]) for r in arcpy.da.SearchCursor(WIND, readList)}
with arcpy.da.SearchCursor(WIND, "BLDG_ID") as cursor:
    for row in cursor:
        lookup = {row[0]:(18)}
        key = frozenset(lookup.items())
        if key not in WINDDict:
           PassFail = "fail"
print PassFail
print lookup
{u'370139999': (18,)}


I thought the above would result in a "PASS" because u'370139999': (18,) does exist in WINDDict, but it didn't.


I'm still wrapping my head around dictionaries, so I would appreciate any help that is offered.



So the problem appears to be with the unicode within the dictionary.


WINDDict = {29184: (u'3701310027', 17), 1: (u'370131', 16), 2: (u'3701310', 16), 3: (u'37013100', 16), 4: (u'370131000', 16), 5: (u'3701310000', 16), 6: (u'3701310001', 16), ...}

if (u'3701310027', 17)in WINDDict:
    print "yes"
    print "no"

if 17 in WINDDict:
    print "yes"
    print "no"

I have no idea how to handle this.


Message was edited by: John Lay to add more explanation.