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

たとえば、キーの 1 つが でu'A'、別のキーがである場合、最初のキーと 2 番目のキーからu'a'取得します。u'a'u'a'

于 2012-08-21T23:57:33.637 に答える