我正在尝试创建一个函数,该函数返回一个带有“偶数”和“奇数”键的字典以及一个偶数&数组。范围内的奇数值。这是我的代码:
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'。”
有人能指出如何修复这些代码吗?我真的很感激!!
修改:
感谢大家的建议!在我在开头定义了键名后,它才起作用。
答案 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)
您设置为空字典,但是您尝试访问名为even
和odd
的密钥?如果要使用密钥even
和odd
,则需要创建密钥。将密钥even
和odd
设置为等于空列表。
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
此代码无需导入'集合'