在Python 2.7中访问带空格的unicode键

1 投票
2 回答
695 浏览
提问于 2025-04-17 18:59

我正在做一个项目,想要处理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]]

撰写回答