2011-09-16 9 views
0
>>> the_values = [u'abc', u'kfc', u'listproperty', u'models', u'new', u'newer', u'note', u'order', u'tag', u'test', u'type'] 
>>> the_keys = [1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1] 
d2 = dict(zip(the_keys, the_values)) 
>>> d2 
{1: u'type', 2: u'tag'} 

「タイプ」と「タグ」だけが使われる理由を教えてもらえますか?キーでPython辞書を並べ替える

私はthe_valuesthe_keysをソートしようとしています。

>>> d2 = dict(zip(the_values, the_keys)) 
>>> d2 
{u'abc': 1, u'models': 2, u'note': 1, u'tag': 2, u'kfc': 2, u'newer': 1, u'listproperty': 1, u'test': 1, u'new': 1, u'type': 1, u'order': 1} 

ありがとう:

は私が the_valuesthe_keys作品の順序を切り替えることに気づきました。

+1

[標準] *辞書は*順序を持たず、特定のキーのみを*単一値にマップします。 (キー、値)のペアの順序付きリスト*を作成できました。 –

答えて

3

キーは一意でなければなりません。キーは1と2を唯一のキーとして使用すると、2つの値を関連付けることができます。

辞書を作成するときに、値に対応するようにキーを設定しています。最初に、1 - > abc、2 - > kfc。しかし、それからあなたはそれらのキーに異なる価値を与えるために、キーを絶えず上書きしています。最後に、キーの最新の値だけが保持されます(1 - > type、2 - > tag)。

2

辞書には、定義上、固有のキーがあるためです。 (それ以外の場合は、キーをルックアップするときに返される値はどのようになりますか?)dictコンストラクタは、キーと値のペアを反復し、その値をディクショナリの対応するキーに割り当てます。プレゼント。

3

他の人は言っているように、キーは一意でなければなりません。それを回避するには、辞書を使用しないでください。

>>> [x[1] for x in sorted(zip(the_keys, the_values), key=operator.itemgetter(0))] 
[u'abc', u'listproperty', u'new', u'newer', u'note', u'order', u'test', u'type', u'kfc', u'models', u'tag'] 
関連する問題