python检查项目是否存在,然后打印项目
我有一本这样的词典:python检查项目是否存在,然后打印项目,python,list,if-statement,Python,List,If Statement,我有一本这样的词典: my_dict= { documents : [{a:1,b:2}, {a:3}, {a:4,b:5} ] } 我只想打印b的值 这是我的密码: for item in my_dict[documents]: print item[b] 但是,这段代码一直给我一个错误,可能
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]
这似乎不起作用。我需要在代码中更改什么才能使其正常工作
谢谢,在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,在Javascript中,如果执行{a:b}
,a
将自动转换为字符串
您可以使用get
方法缩短代码,该方法允许您在dict中不存在提供的键时指定默认值:
for item in my_dict['documents']:
print item.get('b', 'NONE')
您可以使用
.get
获取默认值:
出于其他目的,您可以使用中的查看该键是否存在:
if 'b' in item:
print "item['b'] exists!"
您的代码有多个问题,有多种方法可以解决。下面是一组相当小的更改:
您定义数据结构的方式是指变量a
、b
和文档
。我猜您的意思是使用文字字符串:
my_dict= { "documents" : [{"a":1,"b":2},
{"a":3},
{"a":4,"b":5}
]
}
假设(1)是正确的,d[key]
如果字典中没有出现key
,至少对于标准dict
类而言,d[key]
将始终引发key错误。一种解决方案是使用d.get(key,DEFAULTVALUE)
which。与当前代码相近的解决方案如下:
for item in my_dict["documents"]:
if "b" in item:
print item["b"]
else:
print "NONE"
这项工作:
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]
你的代码很好。您只需要在定义键和使用键提取值时用单引号将键括起来。您确实需要包含if
语句来检查密钥是否存在。Zaphod,关于缺少预期的引号,您可能是对的,但是OP的代码在第二个字典({“a”:3}
)上无论如何都会失败,因为它不包含密钥“b”
@DanLenski。这就是为什么需要检查钥匙的原因<代码>如果项中的“b”为“
”。是,但OP的当前代码未正确检查密钥是否存在if d[missing_key]:…
将在Python的标准dict
类中引发错误,这是经过设计的。见下文。
>>> [d['b'] for k, l in DoLoD.items() for d in l if 'b' in d]
[2, 5]