コード:
d = {'a': 0, 'b': 1, 'c': 2}
l = d.keys()
print l
これは印刷し['a', 'c', 'b']
ます。メソッドがlkeys()
内のキーワードの順序をどのように決定するのかわかりません。ただし、「適切な」順序でキーワードを取得できるようにしたいと考えています。もちろん、正しい順序でリストが作成されます。['a', 'b', 'c']
コード:
d = {'a': 0, 'b': 1, 'c': 2}
l = d.keys()
print l
これは印刷し['a', 'c', 'b']
ます。メソッドがlkeys()
内のキーワードの順序をどのように決定するのかわかりません。ただし、「適切な」順序でキーワードを取得できるようにしたいと考えています。もちろん、正しい順序でリストが作成されます。['a', 'b', 'c']
回答:
OrderedDict(Python 2.7が必要)以上を使用できます。
また、で作成したはすでに要素の順序を忘れているため、機能しOrderedDict({'a': 1, 'b':2, 'c':3})
ません。代わりに、を使用します。dict
{...}
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
ドキュメントで述べたように、Python 2.7より前のバージョンでは、このレシピを使用できます。
Python 3.7.0では、dict
オブジェクトの挿入順序保持の性質がPython言語仕様の公式の一部であると宣言されています。したがって、それに依存することができます。
Python 3.6以降、PythonのCPython実装では、辞書はデフォルトで挿入順序を維持します。ただし、これは実装の詳細と見なされます。collections.OrderedDict
Pythonの他の実装全体で保証されている挿入順序が必要な場合は、引き続き使用する必要があります。
挿入されたアイテムの順序を記憶するcollections.OrderedDict
が必要な場合にクラスを使用しますdict
。
http://docs.python.org/tutorial/datastructures.htmlから:
「ディクショナリオブジェクトのkeys()メソッドは、ディクショナリで使用されているすべてのキーのリストを任意の順序で返します(ソートする場合は、sorted()関数を適用するだけです)。
辞書はハッシュマップなので、順序は関係ありません。それはそれがどのように押し込まれるかの順序に依存します:
s = 'abbc'
a = 'cbab'
def load_dict(s):
dict_tmp = {}
for ch in s:
if ch in dict_tmp.keys():
dict_tmp[ch]+=1
else:
dict_tmp[ch] = 1
return dict_tmp
dict_a = load_dict(a)
dict_s = load_dict(s)
print('for string %s, the keys are %s'%(s, dict_s.keys()))
print('for string %s, the keys are %s'%(a, dict_a.keys()))
出力:
文字列abbcの場合、キーはdict_keys(['a'、 'b'、 'c'])
です。文字列cbabの場合、キーはdict_keys(['c'、 'b'、 'a'])です。