在python字典中用“None”替换空值

时间:2012-03-07 21:16:02

标签: python dictionary

我有一个 Python 字典,我是从arcgis shapefile生成的。字典有key = FID(点ID):value =要么没有,要么是“HH”。字典看起来像这样:

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' ']....}

我使用以下代码从arcgis shapefile创建字典后,显示值[u'']和[u'HH']的额外字符:

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 个答案:

答案 0 :(得分:2)

您的for循环看起来不错,您可能希望使用==代替is来使其正常工作。在Python中,is运算符比较两个对象的身份。

我似乎能够比较列表,与其中一条评论相反:

>>> a = [u' ']
>>> a is [u' ']
False
>>> a == [u' ']
True

答案 1 :(得分:2)

它没有做你想要的,而是使用==

此外,dict.get()

此外,'0' 等于 0

答案 2 :(得分:2)

其他人告诉你在is时使用==有什么问题,但你可以通过添加一些代码来跳过整个循环:

for row in sc:
    Cluster_dict[row.FID] = [row.COType] if row.COType != u' ' else None