1

1つのステートメントで辞書内に辞書を作成しようとしています。キーが存在しない場合は、作成する必要があります。

私が今持っているもののコードスニペット:

self.data[self.stringvar1.get()] = { date : (int(self.total.get()), int(self.resources.get())) }

これは新しいキーを作成しませんが、stringvar1が異なっていても、self.dataをオーバーライドします。いくつかのオプションを試しましたが、必要なものが見つかりませんでした。キーが存在するかどうかを手動で確認する必要がありますか、それとも簡単なイディオムがありますか?

4

2 に答える 2

2

1つのオプションは、を作成self.dataすることcollections.defaultdict(dict)です。これに存在しないキーにアクセスするdefaultdictと、このキーの新しい辞書が自動的に作成され、次のように簡単に使用できます。

self.data[self.stringvar1.get()][date] = (
    int(self.total.get()), int(self.resources.get()))

defaultdictは取得されないため、バグを非表示にするリスクが伴うことに注意してくださいKeyError。別の方法は、プレーンdictsetdefault()メソッドを使用することです。

self.data.setdefault(self.stringvar1.get(), {})[date] = (
    int(self.total.get()), int(self.resources.get()))
于 2012-07-18T10:01:28.583 に答える
0

これは答えというよりはアイデアです(私は「新しい」ユーザーなので、コメントを追加できないかもしれません)。

辞書をマージするには、次のようなことを試してみてください。

var = dict(dict1.items() + dict2.items())

キーが存在しない場合の追加については、以下を確認することをお勧めします。

setdefault(key[, default])
If key is in the dictionary, return its value. If not, insert key with a value of default and return default. default defaults to None.
于 2012-07-18T10:16:22.607 に答える