2016-11-23 30 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

「odd」的定義在哪裏? – 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

最好的感謝是接受和/或upvote答案:) – 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是一個可變的工作。 例如,

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

如果你想有{'foo': 'bar'},你應該寫

>>> d = {} 
>>> d['foo'] = 'bar' 
>>> d 
{'foo': 'bar'} 
相關問題