Python dict.keys以重复列出结果

时间:2012-08-21 23:52:12

标签: python list key

我有一本字典并使用.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']

为什么元素重复?

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

3 个答案:

答案 0 :(得分: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']

答案 1 :(得分:1)

字符串区分大小写:

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

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

>>> list(set(['AAA', 'aaa', 'AAA', 'aaa']))
['aaa', 'AAA']

答案 2 :(得分:0)

例如,如果其中一个键为u'A'而另一个键为u'a',那么您将从第一个键u'a'获取u'a'第二个。

相关问题