在Python 2.7中访问带空格的unicode键
我正在做一个项目,想要处理Excel文件(通过xlrd
读取),并对里面的地址进行地理编码。为此,我使用了一个目录列表,每个目录条目对应一个独立的网站。
比如说,addressList[0]
会得到以下内容:
{text:u'First name ': u'John',
text:u'Site City': u'Indio',
text:u'Site State': u'CA',
text:u'Last name': u'Doe',
text:u'Site Phone': u'760-555-1234',
text:u'Site Zip': u'92201',
text:u'Site Address1': u'1313 Mockingbird Lane',
text:u'Site Name': u'Tyrell Industries',
text:u'Hours': u'Mon-Fri 12:00-1:00',
text:u'Affliation': u'Boys & Girls Clubs of America'}
(我刚发现电子表格中的“affiliation”拼错了,真是无奈。)
我知道在Python中,字典的键可以包含空格,这应该没问题。但是当我输入addressList[0]['Site Phone']
时,却出现了KeyError错误。实际上,尝试获取'Hours'这个键的值时也出现了类似的KeyError。
根据一个关于Unicode键的问题,我尝试了以下方法:
STRING_DATA = dict([(str(k), v) for k, v in addressList[0].items()])
结果得到了一个字典,里面的条目像这样:
"text:u'Site Name'": u'Tyrell Industries',
这还算可以,但现在我得通过STRING_DATA["text:u'Site Name'"]
来访问值,这感觉有点麻烦。
有没有更快或更简单的方法来使用这些键呢?
2 个回答
1
你只需要这个就能获取你的列标题:
column_names = site_sheet.row_values(rowx=0, end_colx=NUMBER_OF_COLUMNS)
不过,看起来这些标题需要稍微整理一下,比如 u'First name '
和 u'Last name'
这两个标题可以通过去掉前后的空格,并且统一使用标题格式来调整:
column_names = [x.strip().title()
for x in site_sheet.row_values(row=0, end_colx=NUMBER_OF_COLUMNS)]
2
text:u'First name ': u'John',
这个写法在字典里是不合法的。
你在像 text:u'First Name'
这样的键前面加上 text:
前缀,是因为你在用 xlrd cell
作为字典的键。
你应该明确地从单元格中提取值,方法是使用 cell.value
。
可以这样写:
new_keys = [k.value for k in addresslist[0]]