4

複数の値を含む複数のタプルを辞書の単一のキーに追加する方法を理解しようとしています。しかし、これまでのところ成功していません。タプルまたはリストに値を追加することはできますが、タプルを追加して、すべての値を含む 1 つのタプルではなく、値を含む 2 つのタプルがキーに含まれるようにする方法がわかりません。

たとえば、辞書を言う ={'Key1':(1.000,2.003,3.0029)}

そして、私は次のようになるように追加したいと思い(2.3232,13.5232,1325.123)ます:

辞書 = {'Key1':((1.000,2.003,3.0029),(2.3232,13.5232,1325.123))}(括弧のセットを忘れました!)

誰かがこれを行う方法を知っていれば、本当に私を悩ませ始めているので、助けていただければ幸いです。

ありがとう!

編集:みんなありがとう!皮肉なことに、複数のタプルの代わりに値を複数のリストにしようとしていたときを除いて、それを試しました。解決策がタプルをリストで囲むことだったとき。ああ皮肉だ。

4

6 に答える 6

13

defaultdictを使用し、常に追加を使用すると、これは問題ありません。

from collections import defaultdict

x = defaultdict(list)
x['Key1'].append((1.000,2.003,3.0029))
于 2012-04-24T16:03:35.883 に答える
6

キーをリストにマップし、タプルをリストに追加するだけです。

d = {'Key1': [(1.000,2.003,3.0029)]}

じゃあ後で..

d['Key1'].append((2.3232,13.5232,1325.123))

今あなたは持っています:

{'Key1': [(1.0, 2.003, 3.0029), (2.3232, 13.5232, 1325.123)]}
于 2012-04-24T16:01:41.803 に答える
4

ディクショナリ値には、2 つのタプルだけを含めることはできません。各ディクショナリ キーは 1 つの値にマップされるため、そのキーに関連付けられた 2 つの別個のタプルを持つ唯一の方法は、それら自体がタプルまたはリスト内に含まれていることです。{'Key1':[(1.000,2.003,3.0029),(2.3232,13.5232,1325.123)]}- 余分な角括弧のペアに注意してください。

これを行う 1 つの方法は、キーに関連付けられている現在の値を取得し、それをリストに追加してから、新しいリストをそのキーに戻すことです。しかし、どのキーでもそれが必要になる可能性がある場合は、最初からすべてのキーに対して実行する必要があります。そうしないと、自分がどのレベルにいるのかを判断するのにさまざまな困難が生じます。

于 2012-04-24T16:03:34.377 に答える
1

それ以外の:

{'Key1':(1.000,2.003,3.0029)}

あなたが望むものは:

{'Key1':[(1.000,2.003,3.0029)]}

別のタプルを追加すると、次のようになります。

{'Key1':[(1.000,2.003,3.0029), (2.3232,13.5232,1325.123)]}
于 2012-04-24T16:02:41.957 に答える
1

あなたの質問の定式化はやや悪いと思います。あなたはしたい:

  1. キーがディクショナリにない場合、タプルをキーに関連付けます
  2. キーがディクショナリにあり、タプルを指している場合、タプルを 2 つのタプルのリストに置き換えます
  3. キーに関連付けられたタプルのリストにタプルを追加します

これは、次のコードで実現できます。

def insertTuple(d, k, tup):
    if k not in d:
        d[k] = tup
    elif type(d[k]) == tuple:
        d[k] = [ d[k], tup ]
    else:
        d[k].append(tup)
于 2012-04-24T16:05:26.277 に答える