Python的Python键错误

时间:2016-08-24 16:38:06

标签: python dictionary

我在Python dicts中遇到了一个奇怪的键错误。我的关键是“B19013_001E”,我用一个嵌套的dict“属性”命名我的dict“sf_tracts”。这是我的代码:

x = "B19013_001E"
for tract in sf_tracts:
    print tract["properties"][x]

有了这个,我得到一个KeyError:“B19013_001E”

但是,如果我将代码更改为此值,则会打印值:

x = "B19013_001E"
for tract in sf_tracts:
    for key in tract["properties"]:
        if key == "B19013_001E":
            print tract["properties"][x]

有什么区别?

CNC中 我认为问题是下划线,因为可以打印其他键。如何访问此密钥?

由于

2 个答案:

答案 0 :(得分:3)

您假设密钥存在于tract in sf_tracts循环产生的所有字典中。这个假设是不正确的。

您的第二段代码恰好起作用,因为您实际上是在测试存在的密钥,尽管代价很高。你可以这样做:

for tract in sf_tracts:
    if x in tract["properties"]:
        print tract["properties"][x]

或者您可以使用:

for tract in sf_tracts:
    print tract["properties"].get(x, 'Key is not present')

对于在值中带下划线的字符串键,没有什么特别之处。下划线对这些键的处理方式没有区别。

答案 1 :(得分:1)

您的某些小册子必须缺少该特定密钥。在第一种情况下,您要求每个管道都打印密钥,而在第二种情况下,您只能将打印操作限制为只有那些有密钥的人。