Замена пустого значения на «None» в словаре Python - PullRequest
2 голосов
/ 08 марта 2012

У меня есть Python словарь, который я сгенерировал из шейп-файла arcgis.В словаре есть ключ = FID (идентификатор точки): значение = либо ничего, либо «ЧЧ».Словарь выглядит следующим образом:

Cluster_dict = {0: [u' '], 1: [u'HH'], 2: [u'HH'], 3: [u' '], 4: [u' '], 5: [u' '], 6: [u' '], 7: [u' '], 8: [u' '], 9: [u' '], 10: [u' '], 11: [u'HH'], 12: [u'HH'], 13: [u'HH'], 14: [u'HH'], 15: [u' '], 16: [u' '], 17: [u' '], 18: [u' '], 19: [u' '], 20: [u' '], 21: [u' '], 22: [u' '], 23: [u'HH'], 24: [u'HH'], 25: [u' '], 26: [u' '], 27: [u' '], 28: [u' ']....}

Дополнительные символы значений [u ''] и [u'HH '] отображаются после того, как я создал словарь из шейп-файла arcgis со следующим кодом:

arcpy.ClustersOutliers_stats('input_file', "GRID_CODE", 'output_file',  "INVERSE_DISTANCE", "EUCLIDEAN_DISTANCE", "NONE", "", "")
Cluster_dict = {}
sc = arcpy.SearchCursor('output_file')
for row in sc:
    Cluster_dict[row.FID] = [row.COType]

print Cluster_dict

Я пытаюсь использовать этот словарь для добавления во вложенный список из 8 (или менее) соседей каждой точки, используя следующий код:

clusterList = []
for clist in Neighbors_List:
    row = []
    for ccode in clist:
        row.append(Cluster_dict[ccode])
    clusterList.append(row)
 print clusterList

Но когда он доходит доrow.append (Cluster_dict [ccode]), я получаю ошибку ключа '0' .Я думаю, что это потому, что нет значения для ключа 0, но я не уверен в этом.Когда я использовал следующий код для замены всех [u ''] на «None», словарь не заменяет пустые значения.Я использую следующий код, чтобы попытаться заменить [u ''].

for k, v in Cluster_dict.iteritems():
    if v is [u' ']:       #I've also tried '[u' ']'
        Cluster_dict[k] = 'None'

print Cluster_dict 

Любая помощь будет оценена.Будет ли легче убрать [u ''] из всех значений в словаре?Если так, может кто-нибудь показать мне, как убрать ненужные символы из словаря?

Большое спасибо за любую помощь.

Ответы [ 3 ]

2 голосов
/ 08 марта 2012

Это не делает то, что вы хотите, используйте == вместо.

Также, dict.get()

Также, '0' делает не равно 0

2 голосов
/ 08 марта 2012

Другие люди говорили вам, что не так с использованием is, когда вы имеете в виду ==, но вы можете пропустить весь этот цикл, добавив немного кода ранее:

for row in sc:
    Cluster_dict[row.FID] = [row.COType] if row.COType != u' ' else None
2 голосов
/ 08 марта 2012

Ваш цикл for выглядит хорошо, вы, вероятно, хотите использовать == вместо is, чтобы он заработал.В Python оператор is сравнивает идентичности двух объектов.

Мне кажется, что я могу сравнивать списки, в отличие от одного из комментариев:

>>> a = [u' ']
>>> a is [u' ']
False
>>> a == [u' ']
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...