2016-06-27 10 views
0

私のコードのどこかで発生した問題をどこからでも探していましたが、解決策は見当たりませんでした...それはかなり面倒なことでしたので、私はあなたにこの質問をしています。Python dict issue iteratingのとき

私はキーと値の単純な辞書を使用していますが、問題は最後にそれを印刷したいときです。たとえば、 "C"のように2つの文字が反転している不思議なシャッフルがあります。 、 "B": "B"の代わりに "X": "X"、 "C": "W"ここに私のコードがあります(それはおそらくより明確になります)

PS。私は最初の数行で構造をfor構造体に置き換えることを試みましたが、改善はありませんでした。

import random 

m1 = ["ABCDEFGHIJKLMNOPQRSTUVWXYZ"] 

l1 = ["ABCDEFGHIJKLMNOPQRSTUVWXYZ"] 

class Separate: 
#Used to separate objects in a list 
    def __init__(self, d): 
      self.d = d 

      self.d = "".join(self.d) 
      l = [] 
      for elt in range(0, len(self.d)): 
        l.append(self.d[elt]) 
      self.d = l 

l1 = Separate(l1) 
l1 = l1.d 
m1 = Separate(m1) 
m1 = m1.d 

random.shuffle(m1) 

key = {} 

count = 0 
while count < len(l1): 
    key[l1[count]] = m1[count] 
    count+=1 

print(key) 

これは(例えば)を返す:

{ 
    'A': 'G', 
    'C': 'A', 
    'B': 'Z', 
    'E': 'U', 
    'D': 'I', 
    'G': 'W', 
    'F': 'X', 
    'I': 'C', 
    'H': 'K', 
    'K': 'T', 
    'J': 'E', 
    'M': 'F', 
    'L': 'B', 
    'O': 'V', 
    'N': 'D', 
    'Q': 'M', 
    'P': 'L', 
    'S': 'S', 
    'R': 'J', 
    'U': 'Q', 
    'T': 'Y', 
    'W': 'H', 
    'V': 'R', 
    'Y': 'P', 
    'X': 'N', 
    'Z': 'O' 
} 
+1

無関係注文を追跡するためにあなたのdictのために必要がある場合は、collections.OrderedDict

すなわちを使用することを検討してくださいあなたのコードの構造には、変数の小文字のL( "l")は使用しないでください。特に1のすぐ隣にあります。 –

+2

ディクテーションはどのオーダーも追跡しません。情報。 – user2357112

+3

辞書は順序付けられていません。 [this](http://stackoverflow.com/questions/15479928/why-is-the-order-in-python-dictionaries-and-sets-任意) – idjaw

答えて

1

コメント欄で述べたように、dict sが順序を持っていません。あなたは、2つの文字列リテラルとジッパーを使用してそれを行うことができます

import collections 
key = collections.OrderedDict() 
+0

コメントありがとうございました! – Sionae

1

m1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 

l1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 

key = {} 

for m,l in zip(m1,l1): 
    key.update({m:l}) 

print(key)