我有一本字典:
my_dict= { documents : [{a:1,b:2},
{a:3},
{a:4,b:5}
]
}
我想只打印b的值。
这是我的代码:
for item in my_dict[documents]:
print item[b]
然而,这段代码一直给我一个错误,可能是因为每个项目中都没有键'b'。
我更改了代码以考虑例外情况:
for item in my_dict[documents]:
if not item[b]:
print "NONE"
else:
print item[b]
这似乎不起作用。我需要在代码中进行哪些更改才能使其正常工作?
谢谢,
答案 0 :(得分:1)
您的代码存在多个问题,以及多种修复方法。以下是一组相当少的更改:
您定义数据结构的方式是指变量a
,b
和documents
。我猜你的意思是使用文字字符串代替:
my_dict= { "documents" : [{"a":1,"b":2},
{"a":3},
{"a":4,"b":5}
]
}
假设(1)是正确的,d[key]
将始终提出KeyError
如果字典中没有key
,至少对于标准dict
}类。一种解决方案是使用d.get(key, DEFAULTVALUE)
will substitute a specified default value for a missing key。关闭当前代码的解决方案如下:
for item in my_dict["documents"]:
if "b" in item:
print item["b"]
else:
print "NONE"
答案 1 :(得分:0)
在Python中,您无法执行{key: 0}
- 而是需要执行{'key': 0}
(将密钥设为字符串,数字或某些先前定义的对象)
您的代码的固定版本看起来像这样:
my_dict= {
'documents' : [
{'a': 1, 'b': 2},
{'a': 3},
{'a': 4, 'b': 5}
]
}
for item in my_dict['documents']:
if 'b' in item:
print item['b']
else:
print 'NONE'
请注意,此行为与Javascript不同,如果您执行{a: b}
,a
将自动转换为字符串。
您可以使用get
方法缩短代码,如果dict中不存在提供的密钥,则可以指定默认值:
for item in my_dict['documents']:
print item.get('b', 'NONE')
答案 2 :(得分:0)
您可以使用.get
获取默认值:
for item in my_dict['documents']:
print item.get('b', 'NONE')
出于其他目的,您可以使用in
查看密钥是否存在:
if 'b' in item:
print "item['b'] exists!"
答案 3 :(得分:0)
这有效:
DoLoD=my_dict= { 'documents' : [{'a':1,'b':2},
{'a':3},
{'a':4,'b':5}
]
}
for k, l in DoLoD.items():
for d in l:
if 'b' in d:
print d['b']
或者,更简洁:
>>> [d['b'] for k, l in DoLoD.items() for d in l if 'b' in d]
[2, 5]