2016-07-29 13 views
0

私はキーと値のペアを関連付ける2つの辞書を持っています。例えば2つの辞書からのキーと値のペアの組み合わせ

a_dict = [a:1, b:1, c:2, d:3] 

b_dict = [z:1, xy:2, gf:4, fd:4] 

は、どのように私は次のように印刷し、それらを組み合わせることについては行くことができます:私はdictsのためのキーと値のペアを取得するために使用

a, 1, z, 1 

b, 1, xy, 2 

c, 2, gf, 4 

d, 3, fd, 4 

はロジック:

a_dict = dict() 
for i in file: 
    a = i.split("|")[3] 
    if a in a_dict.keys(): 
     a_dict[a] += 1 
    else: 
     a_dict[a] = 1 

for a in a_dict.keys(): 
    b_dict = dict() 
    for i in file: 
     if a not in i: 
      continue 
     else: 
      b = i.split("|")[5] 
      if b in b_dict.keys(): 
       b_dict[b] += 1 
      else: 
       b_dict[b] = 1 
+1

ディクショナリの項目がどのように一致するかを決定するロジックは何ですか? Pythonの 'dict'は本質的に順序付けられていないので、どのように一致するか気にしない限り、反復順序に頼ることはできません。彼らは価値によって命令されるべきですか?もしそうなら、等しい値の順番に気をつけますか?(例えば、 'b'は' a'や 'fd'の前に' gf'の前に来ることができますか? – Blckknght

+0

あなたのタイムリーな返答をありがとう、私はどのように私はキーを達成するために、各辞書の値を反映するために私の質問を編集しました。 – ClamSnorkel

+0

編集しても、何をしようとしているのかは不明です。辞書は順序がないので、どのようにキーを結合したいですか?あなたの例では、単に 'a'が' dict1'のインスタンス化の最初のキーであるから、 'dict1.keys()'の最初の項目が 'a'になることを(一般的に)意味しません – mwm314

答えて

1

最初に、コメントが述べたように、辞書は順序付けられていません。注文が問題となるキー(つまり、a_dictに挿入した最初のキーとb_dictに挿入した最初のキーが一致する)を組み合わせる場合は、OrderedDictを使用する必要があります。したがって、ファイルから読み込むときにa_dictb_dictOrderedDictオブジェクトに変更する必要があります。

from collections import OrderedDict 

a_dict = OrderedDict() 
b_dict = OrderedDict() 

a_dict["a"] = 1 
a_dict["b"] = 1 
a_dict["c"] = 2 
a_dict["d"] = 3 

b_dict["z"] = 1 
b_dict["xy"] = 2 
b_dict["gf"] = 4 
b_dict["fd"] = 4 

for a_key, b_key in zip(a_dict, b_dict): 
    print a_key, ", ", a_dict[a_key], ", ", b_key, ", ", b_dict[b_key] 

出力:

a , 1 , z , 1 
b , 1 , xy , 2 
c , 2 , gf , 4 
d , 3 , fd , 4 

をそれが依存かもしれないが(これは通常の辞書ではない常に動作することを確認してここにあなたが求めているかのキーを印刷する方法の例です。キーの上に)。そのようa_dictb_dictを初期化するために、上記の答えを変更します。

a_dict = dict() 
b_dict = dict() 

、あなたはおそらくキーが一致しない異なる出力が表示されます。私のコンソールは私を与える:物語の

a , 1 , xy , 2 
c , 2 , gf , 4 
b , 1 , z , 1 
d , 3 , fd , 4 

教訓:dict注文事項を使用しないでください。それらは単にキー値ストアであり、キーの順序は任意です。

+0

さて、多くのことを説明してくれました。ありがとうございました! – ClamSnorkel

0

手順1)リストに変換します。私は自分の携帯電話上でこれをやっているので、私はフォーマットに謝罪

for i in range(len(dict1)): 
>print(dict1[i][0],dict1[i][1],dict2[i][0], 
dict1[i][1]) 

dict1=dict1.items() 
dict2=dict2.items() 

ステップそれらを通じて2)ループように同じサイズである)(dictの(今リストの両方を想定)。

NB> =タブ

編集:私は自分のコンピュータの前に座っておりませんので、これが動作するかどうか、私は確認することはできません。

関連する問題