web-dev-qa-db-ja.com

キー値と対応する値なしでpythonの辞書を初期化する

キーを使用してpythonのディクショナリを初期化する方法はあるが、それらを設定するまで対応する値はないのではないかと思っていました。といった:

Definition = {'Apple': , 'ball': }

そして、後でそれらを設定できます:

Definition[key] = something

キーを初期化するだけですが、後で設定するまで対応する値がわかりません。基本的に、見つかった値を追加するキーを知っています。ありがとう。

57
user2989027

それらをNoneに初期化できます。

55
Scott Hunter

fromkeys関数を使用して、デフォルト値で辞書を初期化します。あなたの場合、デフォルト値を考慮していないので、Noneで初期化します。

empty_dict = dict.fromkeys(['Apple','ball'])

これにより、empty_dictが次のように初期化されます。

empty_dict = {'Apple': None, 'ball': None}

別の方法として、None以外のデフォルト値で辞書を初期化する場合は、次のようにできます。

default_value = 'xyz'
nonempty_dict = dict.fromkeys(['Apple','ball'],default_value)
70
codegeek

defaultdictを使用できます。キーが既に存在するかどうかを心配せずに辞書の値を設定できます。まだ初期化されていないキーにアクセスすると、指定した値が返されます(以下の例ではNoneが返されます)

from collections import defaultdict
your_dict = defaultdict(lambda : None)
8
Hammer

目的が何であるか、最初にキーを初期化する理由を知っておくとよいでしょう。私はあなたがそれをする必要があるかどうか全くわかりません。

1)キーの出現回数をカウントする場合は、次のようにします。

Definition = {}
# ...
Definition[key] = Definition.get(key, 0) + 1

2)遭遇しなかったキーについて後でNone(または他の値)を取得したい場合、再びget()メソッドを使用できます:

Definition.get(key)  # returns None if key not stored
Definition.get(key, default_other_than_none)

3)他のすべての目的のために、予想されるキーのリストを使用し、後で見つかったキーがそれらと一致するかどうかを確認できます。

たとえば、これらのキーの値のみを保存する場合:

expected_keys = ['Apple', 'banana']
# ...
if key_found in expected_keys:
    Definition[key_found] = value

または、予想されるすべてのキーが見つかったことを確認する場合:

assert(all(key in Definition for key in expected_keys))
6
user2443147

値を空の文字列として初期化し、後で見つかった値を入力できます。

dictionary = {'one':'','two':''}
dictionary['one']=1
dictionary['two']=2
4
creggnog
q = input("Apple")
w = input("Ball")
Definition = {'Apple': q, 'ball': w}
2
Aktufono

@ user2989027による明確なコメントに基づいて、私は良い解決策は次のとおりだと思います:

definition = ['Apple', 'ball']
data = {'orange':1, 'pear':2, 'Apple':3, 'ball':4}
my_data = {}
for k in definition:
  try:
    my_data[k]=data[k]
  except KeyError:
    pass
print my_data

私はここで何も派手なことをしないようにしました。データと空の辞書を設定します。次に、データディクショナリ内の潜在的なキーを表す文字列のリストをループします。各値をdataからmy_dataにコピーしますが、データに必要なキーが含まれていない場合を考えます。

0
Robert Lugg