0

我有一个字典,.keys()用来转换成一个键列表,然后小写键并对列表进行排序,如下所示:

dictionary = list()
# covert all to lower case
for word in self._dict.keys():
  dictionary.append(word.lower())
dictionary.sort()
print dictionary[:5]

印刷[u'a', u'a', u'aa', u'aa', u'aaa']

为什么元素是重复的?

更新:愚蠢的我,没想到原始字典中可能有小写字母......纯粹的尴尬

4

3 回答 3

1

因为您已将键转换为小写。例如:

'AAA'.lower() == 'aaa'
True
'Aa'.lower() == 'aA'.lower()
True

所以,如果你有一个这样定义的类:

class C:
    def __init__(self):
        self.a = None
        self.A = None
        self.aA = None
        self.Aa = None
        self.AAA = None
        self.aAa = None

然后是它的一个实例:

>>> c = C()
>>> c.__dict__
{'a': None, 'A': None, 'aA': None, 'AAA': None, 'Aa': None, 'aAa': None}
>>> c.__dict__.keys()
['a', 'A', 'aA', 'AAA', 'Aa', 'aAa']

将键转换为小写会导致重复:

>>> sorted(key.lower() for key in c.__dict__.keys())
['a', 'a', 'aa', 'aa', 'aaa', 'aaa']
于 2012-08-21T23:57:21.183 回答
1

字符串区分大小写:

>>> 'AA' == 'aa'
False

字典键也区分大小写,因此将它们全部转换为小写可能会给您重复。要摆脱重复项,请使用一个set对象:

>>> list(set(['AAA', 'aaa', 'AAA', 'aaa']))
['aaa', 'AAA']
于 2012-08-21T23:59:33.220 回答
0

例如,如果其中一个键是u'A',另一个键是u'a',那么您u'a'将从第一个和u'a'第二个中获得。

于 2012-08-21T23:57:33.637 回答