どのようなアプローチを取ることができます私はdictで似た名前を持つことができない場合は?

私はまだソフトウェア設計に多くの経験を持っていないので、プログラマーがこのタイプの問題をどのように解決するのかよくわかりません。私は基本的にいくつかの値を作成し、それらを辞書に格納していますが、名前は一意ではありません。私はdictsに同じキー名を格納することはできませんが、ソフトウェアエンゲイナはこの問題を回避する方法を知っています(私はこれに直面する最初ではないと確信しています)?

私はいくつかのコードが理解しやすくなると思います(2つのリスト、動物と果物のうちの1つ、そして2つの間にランダムな値を生成します。後で使用できるようにこのデータを格納する方法を理解しようとしています)。

lista = ['dog', 'cat', 'elephant', 'pig', 'bear']
listb = ['apple', 'pear']

dict_of_lists_values = {}
for list_a in lista:
    for list_b in listb:
        #print list_a, list_b
        #print lista.index(list_a), listb.index(list_b), lista.index(list_a) *  listb.index(list_b)
        dict_of_lists_values[list_a] = [lista.index(list_a) *  listb.index(list_b), list_b]

for lists_data in dict_of_lists_values:
    print lists_data, ' holds ', dict_of_lists_values[lists_data]

あなたは最終結果が表示されます:

elephant  holds  [2, 'pear']
pig  holds  [3, 'pear']
dog  holds  [0, 'pear']
bear  holds  [4, 'pear']
cat  holds  [1, 'pear']

以前の結果(これはリストのリストにリンゴを含み、梨は含まないだろう)を上書きするため、全体的に意味をなさない。ユニークな5だけでなく10の結果をすべて保存したい場合は、どうすればこのデザインを再設計できますか?

前もって感謝します。

0

3 答え

各動物のために一種の在庫をモデル化しようとしているようですね。値として[count、fruit]の組を直接代入する代わりに、各動物を空の辞書で初期化し、そこに各動物の在庫を格納します。

bigdict = { }  # was: dict_of_lists_values
for a in lista:
    bigdict[a] = { }

for a in lista:
    for b in listb:
        lista[a][b] = lista.index(a) *  listb.index(b) # or whatever
1
追加された

同じ名前が異なるものを識別するためのものである場合、3つの異なるブタを区別する別の方法がなければなりません。THATをキーとして使用します。

1
追加された
+ 1.キーを値そのものにすることは考えていない。それはかなりクールな考えです。ありがとうございました。
追加された 著者 Lostsoul,

結合キーを使用することができます。たとえば、各リストの要素のタプルをキーとして使用すると、次のようになります。

dict_of_lists_values[(list_a, list_b)] = lista.index(list_a) *  listb.index(list_b)

そして同じ出力を得る:

for lists_data in dict_of_lists_values:
    print lists_data[0], ' holds ', dict_of_lists_values[lists_data], lists_data[1]
1
追加された
それは華麗です。ありがとう、それは私がユニークなキーを使用させながら値を維持する..名前としてタプルを使用するとは思わない。
追加された 著者 Lostsoul,