1

如果不是很明显,我是通过网络教程学习的新手。

我正在尝试遍历具有不同长度的字典,并将结果放在表中。我想在可能存在空值的表中放入“nothing”。

我正在尝试以下代码:

import os

os.system("clear")

dict1 = {'foo': {0:'a', 1:'b', 3:'c'}, 'bar': {0:'l', 1:'m', 2:'n'}, 'baz': {0:'x', 1:'y'} }
list1 = []
list2 = []
list3 = []

for thing in dict1:
    list1.append(dict1[thing][0])
print list1

for thing in dict1:
    list2.append(dict1[thing][1])
print list2

for thing in dict1:
    if dict1[thing][2] == None:
        list3.append('Nothing')
    else:
        list3.append(dict1[thing][2])

我得到以下输出/错误:

['x', 'a', 'l']
['y', 'b', 'm']
Traceback (most recent call last):
  File "county.py", line 19, in <module>
    if dict1[thing][2] == None:
KeyError: 2

如何在字典中引用空值?

谢谢!

4

3 回答 3

6

使用get(). 默认会返回一个None

val = dict1[thing].get(2)

或者指定你想要的默认值:

val = dict1[thing].get(2, 'nothing')

这样,无论密钥是否存在,您都可以将有效的“无”作为后备。

for thing in dict1:
    list3.append(dict1[thing].get(2, 'Nothing'))
于 2012-08-28T19:03:38.360 回答
5

您应该使用inornot in运算符来检查密钥是否存在:

if 2 not in dict[thing]:
    # do something

或者,如果您真的想None作为后备,请使用.get()

val = dict[thing].get(2)
if val is None:
    # do something

此外,将来,您应该is None在比较时使用None.

于 2012-08-28T19:04:20.497 回答
0

尝试使用运算符访问不存在的密钥[]将始终返回一个KeyError. 您可以使用该dict.get(key, default)方法返回默认参数中指定的值,也可以在try/except块中访问字典,并让 except 块捕获KeyError异常并将“Nothing”附加到列表中。

于 2012-08-28T19:07:14.247 回答