2016-11-23 6 views
0

"even"と "odd"というキーを持つディクショナリと、偶数の範囲の奇数値の配列&を返す関数を作成しようとしています。ここに私のコードです:エラー:グローバル名 'odd'がディクショナリの作成時に定義されていません

def dictionary_even_odd(x, y): 
     d = {} 
     for i in range(x, y+1): 
      if i % 2 == 0: 
       d[even].append(i) 
      else: 
       d[odd].append(i) 
     return d 

をしかし、私は「NameError:グローバル名 『奇数』が定義されていません」というエラーメッセージが表示されます。

誰でもこれらのコードを修正する方法を指摘できますか?とても感謝しております!!

編集

の提案のためのみんなありがとう!最初にキー名を定義した後で動作しました。

+1

を書くべきですか? –

+1

そして、「奇数」はどこに定義されていますか? – TigerhawkT3

+0

あなたは 'd = {}'が 'd = {" even::[]、 "odd":[]} 'であることを意味するのでしょうか? –

答えて

2

あなたは、コレクションからdefaultdictを使用する必要があり、文字列のキーが必要「にも」と「奇数」

import collections 
def dictionary_even_odd(x, y): 
    d = collections.defaultdict(list) 
    for i in range(x, y+1): 
     if i % 2 == 0: 
      d['even'].append(i) 
     else: 
      d['odd'].append(i) 
    return d 
+0

これは私のために働いた、ありがとう! –

+0

最高のおかげで、答えを受け入れるか、またはアップアップしてくれます:) – Skycc

1

あなたの設定空の辞書に、しかし、あなたはその後、evenoddと呼ばれるアクセスキーにしてみてください? を作成する必要がある場合は、evenoddのキーを作成する必要があります。キーevenoddを空のリストと同じに設定します。

def dictionary_even_odd(x, y): 
    d = {"even": [], "odd": []} 
    for i in range(x, y+1): 
     if i % 2 == 0: 
      d["even"].append(i) 
     else: 
      d["odd"].append(i) 
    return d 
+0

ありがとうございました。 :) –

0
def dictionary_even_odd(x, y): 
d = {'even':[], 'odd':[]} 
for i in range(x, y + 1): 
    if i % 2 == 0: 
     d['even'].append(i) 
    else: 
     d['odd'].append(i) 
return d 

このコードは、 'コレクション'

+0

あなたのインデントは間違っています –

1

あなたは

d = {} 
d[foo] = 'bar' 

を書くときPythonはfooが変数であることを考えてのインポートアウトで動作します。あなたは{'foo': 'bar'}を持たせたい場合は 例えば、

>>> d = {} 
>>> foo = 42 
>>> d[foo] = 'bar' 
>>> d 
{42: 'bar'} 

、あなたの予想出力は何

>>> d = {} 
>>> d['foo'] = 'bar' 
>>> d 
{'foo': 'bar'} 
関連する問題