错误:创建字典时未定义全局名称“odd”

时间:2016-11-23 03:46:48

标签: python dictionary

我正在尝试创建一个函数,该函数返回一个带有“偶数”和“奇数”键的字典以及一个偶数&数组。范围内的奇数值。这是我的代码:

    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:未定义全局名称'odd'。”

有人能指出如何修复这些代码吗?我真的很感激!!

修改

感谢大家的建议!在我在开头定义了键名后,它才起作用。

4 个答案:

答案 0 :(得分:2)

你需要使用集合中的defaultdict,并需要字符串'even'和'odd'

的键
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

答案 1 :(得分: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

答案 2 :(得分: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'}

答案 3 :(得分: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

此代码无需导入'集合'