我有一本字典并使用.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']
为什么元素重复?
更新:愚蠢的我,没想到原字典里可能会有小写字母......纯粹的尴尬
答案 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'
第二个。