свяжите много значения в одной записи без дублирования

У меня есть dbf таблица как, ниже которого результат одного многим, присоединяются от двух таблиц. Я хочу иметь уникальные зональные значения от одного идентификационного поля Taxlot.

имя таблицы: входная таблица
tid-----зона
1-----A
1-----A
1-----B
1-----C
2-----D
2-----E
3-----C

Желательное имя таблицы таблицы выходных данных: входная таблица
tid-----зона
1-----A, B, C
2-----D, E
3-----C

Я получил некоторую справку, но не мог добраться до работы.

inputTbl = r"C:\temp\input.dbf"
taxIdZoningDict = {}
searchRows = gp.searchcursor(inputTbl)
searchRow = searchRows.next()
while searchRow:
   if searchRow.TID in taxIdZoningDict:
      taxIdZoningDict[searchRow.TID].add(searchRow.ZONE)
   else:
      taxIdZoningDict[searchRow.TID] = set() #a set prevents dulpicates!
      taxIdZoningDict[searchRow.TID].add(searchRow.ZONE)
   searchRow = searchRows.next()

outputTbl = r"C:\temp\output.dbf"
gp.CreateTable_management(r"C:\temp", "output.dbf")
gp.AddField_management(outputTbl, "TID", "LONG")
gp.AddField_management(outputTbl, "ZONES", "TEXT", "", "", "20")
tidList = taxIdZoningDict.keys()
tidList.sort() #sorts in ascending order
insertRows = gp.insertcursor(outputTbl)
for tid in tidList:
   concatString = ""
   for zone in taxIdZoningDict[tid]
      concatString = concatString + zone + ","
   insertRow = insertRows.newrow()
   insertRow.TID = tid
   insertRow.ZONES = concatString[:-1]
   insertRows.insertrow(insertRow)
del insertRow
del insertRows
5
задан S.Lott 17 March 2010 в 18:20
поделиться

2 ответа

Вот быстро сделанный код на Python, который может удовлетворить ваши потребности, с минимальными усилиями.

import collections

d = collections.defaultdict(list)

with open("input_file.txt") as f:   
    for line in f:
        parsed = line.strip().split()
        print parsed
        k = parsed[0]
        v = parsed[2]
        d[k].append(v)

for k, v in sorted(d.iteritems()):
    s = " ----- "
    v = list(set(v)) # Must be a library function to do this
    v.sort()
    print k, s,
    for j in v:
        print j,
    print

Надеюсь, это поможет

0
ответ дан 14 December 2019 в 08:47
поделиться

Я думаю, что ответ Морлока не удовлетворяет требованию удаления дубликатов. Я бы использовал defaultdict (set), который будет автоматически опускать дубликаты вместо defaultdict (list), и, следовательно, .add () вместо .append ().

1
ответ дан 14 December 2019 в 08:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: