检查字典中的多个键是否存在和值

时间:2016-11-04 15:26:48

标签: python

只有当一个对象有两个具有给定值的键时,我才想做某事:

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...

由于键和值不能同时为两个值,因此无效。

2 个答案:

答案 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替换为您知道永远不会是namecho SIGALRM; //14 的有效值的值。