<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Iterate through rows and write new fields based on a criteria matched with reference table  in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176920#M13599</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Yam,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would suggest using cursors to iterate through your tables, check values and update them.&amp;nbsp; &lt;A href="https://community.esri.com/migrated-users/4811"&gt;Richard Fairhurst&lt;/A&gt;​ has an excellent blog post about using cursors and dictionaries to update or add field values &lt;A href="https://community.esri.com/migration-blogpost/1885"&gt;Turbo Charging Data Manipulation with Python Cursors and Dictionaries&lt;/A&gt;.&amp;nbsp; I suggest you take a look at it and see if it can be applied for your needs. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Ian&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jul 2015 18:07:18 GMT</pubDate>
    <dc:creator>IanMurray</dc:creator>
    <dc:date>2015-07-15T18:07:18Z</dc:date>
    <item>
      <title>Iterate through rows and write new fields based on a criteria matched with reference table</title>
      <link>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176919#M13598</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I am trying to iterate through rows in a attribute table( named here :target_table) and look for certain search criteria based on&amp;nbsp; a reference_table.csv. Search criteria is a set of numbers (see below), if criteria is met then I would like to add new fields in target_table and write with values based on the reference_table. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;reference_table:&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;IMG alt="ScreenHunter_44 Jul. 15 10.19.jpg" class="image-1 jive-image" src="/legacyfs/online/117448_ScreenHunter_44 Jul. 15 10.19.jpg" style="height: auto;" /&gt;&lt;/P&gt;&lt;P style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;Columns: sec1,sec2,sec3 and sec4&amp;nbsp; are used as a criteria to search in target_table rows (see below). Example, in the first row: 5,6,31,32(order is not an issue), if this combination of numbers matches while scanning through first 4 rows in the target_table then "Pick" and "cornderID" column will be added into target_table with their values 31 and 200100 respectively.&lt;/P&gt;&lt;P style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;&lt;/P&gt;&lt;P style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;target_table:&lt;/P&gt;&lt;P style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;&lt;IMG alt="ScreenHunter_47 Jul. 15 13.12.jpg" class="image-2 jive-image" src="/legacyfs/online/117473_ScreenHunter_47 Jul. 15 13.12.jpg" style="height: auto;" /&gt;&lt;/P&gt;&lt;P style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;&lt;SPAN style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;​This is a shape attribute table where script will scan trough column "label" then look for the first 4 rows( moving downward) and search for criteria(as mention above) and add new fields "Pick" and "cornerID" with their values . Example, the first 4 rows combination under field "label" is 1,6,36,31,&amp;nbsp; so based on the search criteria from the reference_table, it should write Pick is 36 and cornerId is 700100. Below is what would final attribute table would look like;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;&lt;/P&gt;&lt;P style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;&lt;SPAN style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;Final:&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;&lt;SPAN style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;&lt;IMG alt="ScreenHunter_50 Jul. 15 13.26.jpg" class="image-3 jive-image" src="/legacyfs/online/117474_ScreenHunter_50 Jul. 15 13.26.jpg" style="height: auto;" /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;&lt;/P&gt;&lt;P style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;Any suggestion with arcpy scripting and tools will be greatly appreciated !&lt;/P&gt;&lt;P style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;&lt;/P&gt;&lt;P style="color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;"&gt;Thanks ! &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jul 2015 17:35:45 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176919#M13598</guid>
      <dc:creator>YamMagar</dc:creator>
      <dc:date>2015-07-15T17:35:45Z</dc:date>
    </item>
    <item>
      <title>Re: Iterate through rows and write new fields based on a criteria matched with reference table</title>
      <link>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176920#M13599</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Yam,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would suggest using cursors to iterate through your tables, check values and update them.&amp;nbsp; &lt;A href="https://community.esri.com/migrated-users/4811"&gt;Richard Fairhurst&lt;/A&gt;​ has an excellent blog post about using cursors and dictionaries to update or add field values &lt;A href="https://community.esri.com/migration-blogpost/1885"&gt;Turbo Charging Data Manipulation with Python Cursors and Dictionaries&lt;/A&gt;.&amp;nbsp; I suggest you take a look at it and see if it can be applied for your needs. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Ian&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jul 2015 18:07:18 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176920#M13599</guid>
      <dc:creator>IanMurray</dc:creator>
      <dc:date>2015-07-15T18:07:18Z</dc:date>
    </item>
    <item>
      <title>Re: Iterate through rows and write new fields based on a criteria matched with reference table</title>
      <link>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176921#M13600</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;And to show how this would look in Python code (based on the attached csv files):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;import csv

def main():
&amp;nbsp;&amp;nbsp;&amp;nbsp; ref = r"D:\Xander\GeoNet\CSVreftarg\reference_table.csv"
&amp;nbsp;&amp;nbsp;&amp;nbsp; tar = r"D:\Xander\GeoNet\CSVreftarg\target_table.csv"

&amp;nbsp;&amp;nbsp;&amp;nbsp; # fill dictionaries
&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_ref = createRefDict(ref)
&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_tar, dct_data = createTarDict(tar)

&amp;nbsp;&amp;nbsp;&amp;nbsp; # read data and enrich
&amp;nbsp;&amp;nbsp;&amp;nbsp; for fid, vals in dct_data.items():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if fid in dct_tar:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key = dct_tar[fid]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if key in dct_ref:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst = dct_ref[key]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vals.extend(lst)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_data[fid] = vals

&amp;nbsp;&amp;nbsp;&amp;nbsp; # check result:
&amp;nbsp;&amp;nbsp;&amp;nbsp; for fid, vals in sorted(dct_data.items()):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "{0},{1}".format(fid, ",".join(str(a) for a in vals))


def createRefDict(ref):
&amp;nbsp;&amp;nbsp;&amp;nbsp; # create dict with key is list of value
&amp;nbsp;&amp;nbsp;&amp;nbsp; # and value is list of return values
&amp;nbsp;&amp;nbsp;&amp;nbsp; # sec1,sec2,sec3,sec4,Pick,cornerID
&amp;nbsp;&amp;nbsp;&amp;nbsp; dct = {}
&amp;nbsp;&amp;nbsp;&amp;nbsp; with open(ref, 'rb') as f:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reader = csv.reader(f)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for row in reader:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if cnt == 1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pass&amp;nbsp; # header
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key = generateKey(row[:4])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct[key] = row[4:]
&amp;nbsp;&amp;nbsp;&amp;nbsp; return dct

def createTarDict(tar):
&amp;nbsp;&amp;nbsp;&amp;nbsp; # read 4 records and compose label list,
&amp;nbsp;&amp;nbsp;&amp;nbsp; # insert this list for every FID
&amp;nbsp;&amp;nbsp;&amp;nbsp; dct = {}
&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_fid = []
&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_lbl = []
&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_data = {}
&amp;nbsp;&amp;nbsp;&amp;nbsp; with open(tar, 'rb') as f:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reader = csv.reader(f)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for row in reader:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if cnt &amp;gt; 1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_data[row[0]] = row[1:]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (cnt-2) % 4 == 0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key = generateKey(lst_lbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for fid in lst_fid:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct[fid] = key
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_fid = [row[0]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_lbl = [row[1]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fid = row[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lbl = row[1]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_fid.append(fid)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_lbl.append(lbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # add last sequence
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key = generateKey(lst_lbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for fid in lst_fid:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct[fid] = key
&amp;nbsp;&amp;nbsp;&amp;nbsp; return dct, dct_data

def generateKey(lst):
&amp;nbsp;&amp;nbsp;&amp;nbsp; lst2 = sorted([int(a) for a in lst])
&amp;nbsp;&amp;nbsp;&amp;nbsp; return ",".join(([str(a) for a in lst2]))

if __name__ == '__main__':
&amp;nbsp;&amp;nbsp;&amp;nbsp; main()&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This will print (fid, label, pick, cornerID)&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;0,1,36,700100
1,6,36,700100
2,36,36,700100
3,31,36,700100
4,1,35,600100
5,2,35,600100
6,36,35,600100
7,35,35,600100
70,2,34,500100
71,3,34,500100
72,34,34,500100
73,35,34,500100&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The content of the dct_ref (reference) dictionary is (key is a sorted comma separated list of labels and the value is a list with the values you want to join):&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;{'5,6,31,32': ['31', '200100'], '2,3,34,35': ['34', '500100'], '1,6,31,36': ['36', '700100'], '4,5,32,33': ['32', '300100'], '3,4,33,34': ['33', '400100'], '29,30,31,32': ['30', '200200'], '1,2,35,36': ['35', '600100'], '27,28,33,34': ['28', '400200'], '28,29,32,33': ['29', '300200']}&lt;/PRE&gt;&lt;P&gt;The content of the dct_tar (target) dictionary is the fid with the list of 4 labels:&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;{'71': '2,3,34,35', '70': '2,3,34,35', '1': '1,6,31,36', '0': '1,6,31,36', '3': '1,6,31,36', '2': '1,6,31,36', '5': '1,2,35,36', '4': '1,2,35,36', '7': '1,2,35,36', '6': '1,2,35,36', '73': '2,3,34,35', '72': '2,3,34,35'}&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The content of the dct_data (data dictionary is the data from the target):&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;{'71': ['3'], '70': ['2'], '1': ['6'], '0': ['1'], '3': ['31'], '2': ['36'], '5': ['2'], '4': ['1'], '7': ['35'], '6': ['36'], '73': ['35'], '72': ['34']}&lt;/PRE&gt;&lt;P&gt;Just to give you an idea...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kind regards, Xander&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 09:06:20 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176921#M13600</guid>
      <dc:creator>XanderBakker</dc:creator>
      <dc:date>2021-12-11T09:06:20Z</dc:date>
    </item>
    <item>
      <title>Re: Iterate through rows and write new fields based on a criteria matched with reference table</title>
      <link>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176922#M13601</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Ian ! I will look into the post you suggested.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jul 2015 20:45:18 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176922#M13601</guid>
      <dc:creator>YamMagar</dc:creator>
      <dc:date>2015-07-15T20:45:18Z</dc:date>
    </item>
    <item>
      <title>Re: Iterate through rows and write new fields based on a criteria matched with reference table</title>
      <link>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176923#M13602</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Xander,&lt;/P&gt;&lt;P&gt;Thanks for your response and the code. It seems working fine with a test datasets though I wanted to write output file in either in the target_table or in seperate .csv file. But some reason it do not print right&amp;nbsp; output for full dataset . I wonder if that is the case due to duplication of row combination in the target_table ?.&lt;/P&gt;&lt;P&gt;I do not see option to attach tables here. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks ! &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jul 2015 21:08:07 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176923#M13602</guid>
      <dc:creator>YamMagar</dc:creator>
      <dc:date>2015-07-15T21:08:07Z</dc:date>
    </item>
    <item>
      <title>Re: Iterate through rows and write new fields based on a criteria matched with reference table</title>
      <link>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176924#M13603</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;In order to attach documents you need to use the advanced editor. There is a link in the upper right corner:&lt;/P&gt;&lt;P&gt;&lt;IMG class="image-1 jive-image" src="https://community.esri.com/legacyfs/online/117483_pastedImage_0.png" style="max-width: 1200px; max-height: 900px;" /&gt;&lt;/P&gt;&lt;P&gt;... to activate the &lt;STRONG&gt;advanced editor&lt;/STRONG&gt;. However, this will only be available if you open the link of the discussion (&lt;EM&gt;the link is not available in your inbox&lt;/EM&gt;). Once you are in the advanced editor in the lower right corner you will see the link to attach files:&lt;/P&gt;&lt;P&gt;&lt;IMG class="image-2 jive-image" src="https://community.esri.com/legacyfs/online/117484_pastedImage_0.png" style="max-width: 1200px; max-height: 900px;" /&gt;&lt;/P&gt;&lt;P&gt;I haven't tested the code to use the more fields, nor have I written the result to a csv file or other format. To do that it would be good if you could provide sample file to see what is possible.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jul 2015 21:41:06 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176924#M13603</guid>
      <dc:creator>XanderBakker</dc:creator>
      <dc:date>2015-07-15T21:41:06Z</dc:date>
    </item>
    <item>
      <title>Re: Iterate through rows and write new fields based on a criteria matched with reference table</title>
      <link>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176925#M13604</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Xander for the tips.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here I attached two tables:&lt;/P&gt;&lt;P&gt;1.referenceALL_table&lt;/P&gt;&lt;P&gt;2.targetSubset_table&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jul 2015 22:00:22 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176925#M13604</guid>
      <dc:creator>YamMagar</dc:creator>
      <dc:date>2015-07-15T22:00:22Z</dc:date>
    </item>
    <item>
      <title>Re: Iterate through rows and write new fields based on a criteria matched with reference table</title>
      <link>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176926#M13605</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I changed the code a bit (it was assuming the label to be as second column), but I noticed that there are a lot of combinations that do not exist in the reference table (2358 out of 3410).&lt;/P&gt;&lt;P&gt;&lt;IMG class="image-1 jive-image" src="https://community.esri.com/legacyfs/online/117563_pastedImage_2.png" style="max-width: 1200px; max-height: 900px;" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Changed code (files on lines 4 and 5, indexes on line 61 and 64):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;import csv

def main():
&amp;nbsp;&amp;nbsp;&amp;nbsp; ref = r"D:\Xander\GeoNet\CSVreftarg\referenceALL_table.csv"
&amp;nbsp;&amp;nbsp;&amp;nbsp; tar = r"D:\Xander\GeoNet\CSVreftarg\targetSubset_table.csv"

&amp;nbsp;&amp;nbsp;&amp;nbsp; # fill dictionaries
&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_ref = createRefDict(ref)
&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_tar, dct_data = createTarDict(tar)

&amp;nbsp;&amp;nbsp;&amp;nbsp; # read data and enrich
&amp;nbsp;&amp;nbsp;&amp;nbsp; for fid, vals in dct_data.items():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if fid in dct_tar:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key = dct_tar[fid]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if key in dct_ref:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst = dct_ref[key]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vals.extend(lst)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_data[fid] = vals

&amp;nbsp;&amp;nbsp;&amp;nbsp; # check result:
&amp;nbsp;&amp;nbsp;&amp;nbsp; for fid, vals in sorted(dct_data.items()):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "{0},{1}".format(fid, ",".join(str(a) for a in vals))

def createRefDict(ref):
&amp;nbsp;&amp;nbsp;&amp;nbsp; # create dict with key is list of value
&amp;nbsp;&amp;nbsp;&amp;nbsp; # and value is list of return values
&amp;nbsp;&amp;nbsp;&amp;nbsp; # sec1,sec2,sec3,sec4,Pick,cornerID
&amp;nbsp;&amp;nbsp;&amp;nbsp; dct = {}
&amp;nbsp;&amp;nbsp;&amp;nbsp; with open(ref, 'rb') as f:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reader = csv.reader(f)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for row in reader:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if cnt == 1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pass&amp;nbsp; # header
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key = generateKey(row[:4])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct[key] = row[4:]
&amp;nbsp;&amp;nbsp;&amp;nbsp; return dct

def createTarDict(tar):
&amp;nbsp;&amp;nbsp;&amp;nbsp; # read 4 records and compose label list,
&amp;nbsp;&amp;nbsp;&amp;nbsp; # insert this list for every FID
&amp;nbsp;&amp;nbsp;&amp;nbsp; # FID,OBJECTID,Join_Count,TARGET_FID,lndkey,label,lndkey_1
&amp;nbsp;&amp;nbsp;&amp;nbsp; dct = {}
&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_fid = []
&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_lbl = []
&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_data = {}
&amp;nbsp;&amp;nbsp;&amp;nbsp; with open(tar, 'rb') as f:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reader = csv.reader(f)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for row in reader:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if cnt &amp;gt; 1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct_data[row[0]] = row[1:]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (cnt-2) % 4 == 0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key = generateKey(lst_lbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for fid in lst_fid:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct[fid] = key
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_fid = [row[0]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_lbl = [row[5]] # was row[1]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fid = row[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lbl = row[5] # was row[1]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_fid.append(fid)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lst_lbl.append(lbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # add last sequence
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key = generateKey(lst_lbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for fid in lst_fid:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dct[fid] = key
&amp;nbsp;&amp;nbsp;&amp;nbsp; return dct, dct_data

def generateKey(lst):
&amp;nbsp;&amp;nbsp;&amp;nbsp; lst2 = sorted([int(a) for a in lst])
&amp;nbsp;&amp;nbsp;&amp;nbsp; return ",".join(([str(a) for a in lst2]))

if __name__ == '__main__':
&amp;nbsp;&amp;nbsp;&amp;nbsp; main()&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 09:06:23 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176926#M13605</guid>
      <dc:creator>XanderBakker</dc:creator>
      <dc:date>2021-12-11T09:06:23Z</dc:date>
    </item>
    <item>
      <title>Re: Iterate through rows and write new fields based on a criteria matched with reference table</title>
      <link>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176927#M13606</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Xander,&lt;/P&gt;&lt;P&gt;The code seems to be working. I think&amp;nbsp; I need to clean my data before feed into the code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you so much! &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jul 2015 23:11:01 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176927#M13606</guid>
      <dc:creator>YamMagar</dc:creator>
      <dc:date>2015-07-15T23:11:01Z</dc:date>
    </item>
    <item>
      <title>Re: Iterate through rows and write new fields based on a criteria matched with reference table</title>
      <link>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176928#M13607</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You're welcome!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jul 2015 01:04:15 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/iterate-through-rows-and-write-new-fields-based-on/m-p/176928#M13607</guid>
      <dc:creator>XanderBakker</dc:creator>
      <dc:date>2015-07-16T01:04:15Z</dc:date>
    </item>
  </channel>
</rss>

