只有当一个对象有两个具有给定值的键时,我才想做某事:
tel = ...
nam = ...
for obj in listofobjs:
for key, val in obj.items():
if (key == 'tel' and val == tel) and \
(key == 'nam' and val == name):
# do something...
由于键和值不能同时为两个值,因此无效。
答案 0 :(得分:3)
这是一种方法,无需使用for obj in listofobjs:
if 'tel' in obj and 'nam' in obj and obj['tel']==tel and obj['nam']==nam:
...
:
if
或者你可以ask for forgiveness提供 for obj in listofobjs:
try:
if obj['tel']==tel and obj['nam']==nam:
...
except KeyError:
pass
块中的所有词典访问安全:
mazepath(X,Y,Maze,Path,Score)
mazepath( 1, 1, [[ o, e, j, p, o],
[ o, j, o, o, o],
[ o, j, mt, j, o],
[ o, o, e, o, o],
[ p, o, j, mb, o]], Path, Score).
答案 1 :(得分:2)
您无需循环for obj in listofobjs:
if (obj.get('tel', None) == tel) and (obj.get('nam', None) == nam):
即可执行此操作。
KeyError
只需使用.get
获取密钥,这样如果密钥不存在,您就不会获得.get
。
None
默认返回None
,但我在此处指定它以突出显示使用其他默认值的功能。如果您想使用.get
作为默认值,则可以省略None
来电中的第二个参数。
将tel
替换为您知道永远不会是nam
或echo SIGALRM; //14
的有效值的值。