Pythonで辞書を印刷しようとしています:
Dictionary = {"Forename":"Paul","Surname":"Dinh"}
for Key,Value in Dictionary.iteritems():
print Key,"=",Value
アイテム「Forename」が最初にリストされていますが、Python らしいの辞書は値でソートされているため、結果は次のようになります。
Surname = Dinh
Forename = Paul
コード内で同じ順序でこれらを印刷する方法またはアイテムが追加される順序(値やキーでソートされていない)?
タプルのリスト(またはリストのリスト)を使用できます。このような:
Arr= [("Forename","Paul"),("Surname","Dinh")]
for Key,Value in Arr:
print Key,"=",Value
Forename = Paul
Surname = Dinh
これから辞書を作ることができます:
Dictionary=dict(Arr)
そして、このように正しくソートされたキー:
keys = [k for k,v in Arr]
次に、これを行います。
for k in keys: print k,Dictionary[k]
しかし、私はあなたの質問に対するコメントに同意します:代わりにループするときに必要な順序でキーをソートするのは簡単ではないでしょうか?
編集:(ありがとうRik Poggi)、OrderedDictこれはあなたのために行います:
od=collections.OrderedDict(Arr)
for k in od: print k,od[k]
まず第一に、辞書はまったくソートされておらず、キーによっても値によってもソートされていません。
そして、あなたの説明に基づいて。あなたは実際に必要です collections.OrderedDict モジュール
from collections import OrderedDict
my_dict = OrderedDict([("Forename", "Paul"), ("Surname", "Dinh")])
for key, value in my_dict.iteritems():
print '%s = %s' % (key, value)
OrderedDictがインスタンス化される前に、dictインスタンスがアイテムの順序をシャッフルするため、別のdictからではなくタプルのリストからOrderedDict
をインスタンス化する必要があることに注意してください。
collections.OrderedDict
。 python2.7とpython3.2 +で利用できます。
これはあなたのニーズをよりよく満たすかもしれません:
Dictionary = {"Forename":"Paul","Surname":"Dinh"}
KeyList = ["Forename", "Surname"]
for Key in KeyList:
print Key,"=",Dictionary[Key]
あなたが望むのはordered dictであるかどうか疑問に思います:
>>> k = "one two three four five".strip().split()
>>> v = "a b c d e".strip().split()
>>> k
['one', 'two', 'three', 'four', 'five']
>>> v
['a', 'b', 'c', 'd', 'e']
>>> dx = dict(Zip(k, v))
>>> dx
{'four': 'd', 'three': 'c', 'five': 'e', 'two': 'b', 'one': 'a'}
>>> for itm in dx:
print(itm)
four
three
five
two
one
>>> # instantiate this data structure from OrderedDict class in the Collections module
>>> from Collections import OrderedDict
>>> dx = OrderedDict(Zip(k, v))
>>> for itm in dx:
print(itm)
one
two
three
four
five
OrderdDict を使用して作成された辞書は、元の挿入順序を保持します。
言い換えると、このようなディクショナリは、挿入された順序に従ってキーと値のペアを繰り返し処理します。
したがって、たとえば、キーを削除してから同じキーを再度追加すると、反復順序は次のようになります。
>>> del dx['two']
>>> for itm in dx:
print(itm)
one
three
four
five
>>> dx['two'] = 'b'
>>> for itm in dx:
print(itm)
one
three
four
five
two
'しかし、Pythonの辞書は値でソートされています'多分私はここで間違っていますが、あなたはどのゲームを考えていますか?辞書は何もソートされていません。
ディクショナリに追加のキーのリストを保持するか、1つまたは複数の配列などの異なるデータ構造を使用するかの2つの解決策があります。