回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在编写这个小脚本:基本上它将list元素(其中包含特殊字符)映射到它的索引以创建字典。</p>
<pre><code>#!/usr/bin/env python
#-*- coding: latin-1 -*-
ln1 = '?0>9<8~7|65"4:3}2{1+_)'
ln2 = "(*&^%$£@!/`'\][=-#¢"
refStr = ln2+ln1
keyDict = {}
for i in range(0,len(refStr)):
keyDict[refStr[i]] = i
print "-" * 32
print "Originl: ",refStr
print "KeyDict: ", keyDict
# added just to test a few special characters
tsChr = ['£','%','\\','¢']
for k in tsChr:
if k in keyDict:
print k, "\t", keyDict[k]
else: print k, "\t", "not in the dic."
</code></pre>
<p>它返回如下结果:</p>
<pre><code>Originl: (*&^%$£@!/`'\][=-#¢?0>9<8~7|65"4:3}2{1+_)
KeyDict: {'!': 9, '\xa3': 7, '\xa2': 20, '%': 4, '$': 5, "'": 12, '&': 2, ')': 42, '(': 0, '+': 40, '*': 1, '-': 17, '/': 10, '1': 39, '0': 22, '3': 35, '2': 37, '5': 31, '4': 33, '7': 28, '6': 30, '9': 24, '8': 26, ':': 34, '=': 16, '<': 25, '?': 21, '>': 23, '@': 8, '\xc2': 19, '#': 18, '"': 32, '[': 15, ']': 14, '\\': 13, '_': 41, '^': 3, '`': 11, '{': 38, '}': 36, '|': 29, '~': 27}
</code></pre>
<p>这一切都很好,除了字符<code>£</code>,<code>%</code>和<code>\</code>分别转换为<code>\xa3</code>,<code>\xa2</code>和<code>\\</code>。有人知道为什么打印<code>ln1</code>/<code>ln2</code>很好,但字典却不行。我该怎么解决?非常感谢您的帮助。干杯!!</p>
<p/><hr/><strong>更新1</strong>
<p>我添加了额外的特殊字符-<code>#</code>和<code>¢</code>,然后我得到了@Duncan的建议:</p>
<pre><code>! 9
? 7
? 20
% 4
$ 5
....
....
8 26
: 34
= 16
< 25
? 21
> 23
@ 8
? 19
....
....
</code></pre>
<p>请注意,第7、19和20个元素,它们根本没有正确打印。第21个元素是实际的<code>?</code>字符。干杯!!</p>
<p/><hr/><strong>更新2</strong>
<p>只是把这个循环添加到我最初的帖子中,来测试我的目的:</p>
<pre><code>tsChr = ['£','%','\\','¢']
for k in tsChr:
if k in keyDict:
print k, "\t", keyDict[k]
else: print k, "\t", "not in the dic."
</code></pre>
<p>我得到的结果是:</p>
<pre><code>£ not in the dic.
% 4
\ 13
¢ not in the dic.
</code></pre>
<p>运行脚本时,它认为<code>£</code>和<code>¢</code>实际上不在字典中,这是我的问题。有人知道如何解决这个问题,或者我做错了什么/我做错了什么?</p>
<p>最后,我将检查字典中某个文件(或一行文本)中的字符,看它是否存在,以及是否有可能在文本中包含<code>é</code>或<code>£</code>等字符。干杯!!</p>