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.
WIND = 'L_DAMAGE_RESULTS_WIND'
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
fail
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.
UPDATE:
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"
else:
print "no"
...
no
if 17 in WINDDict:
print "yes"
else:
print "no"
...
yesI have no idea how to handle this.
Message was edited by: John Lay to add more explanation.