Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 给定两个可能的字典键,如何使用实际设置的键_Python_Python 3.x - Fatal编程技术网

Python 给定两个可能的字典键,如何使用实际设置的键

Python 给定两个可能的字典键,如何使用实际设置的键,python,python-3.x,Python,Python 3.x,我从一个API收到一个字典,但问题是有时我会得到{value:test}和其他{key:test}。我正在使用try/except块获取一组: try: var = received_dict['value'] except KeyError: var = received_dict['key'] 在Python3中有更好的方法吗?如果两个键都不存在,这仍然会抛出一个错误,这几乎肯定是所需的行为 received_dict.get('value', received_dict.

我从一个API收到一个字典,但问题是有时我会得到
{value:test}
和其他
{key:test}
。我正在使用try/except块获取一组:

try:
    var = received_dict['value']
except KeyError:
    var = received_dict['key']

在Python3中有更好的方法吗?

如果两个键都不存在,这仍然会抛出一个错误,这几乎肯定是所需的行为

received_dict.get('value', received_dict.get('key', False))
received_dict.get('value', received_dict['key'])
然而,python通常使用:请求原谅比允许更容易。如果其中一种情况比另一种情况更频繁,那么你目前的做法可能是最好的。如果它真的是50/50,那么使用get可能是一种更干净的方式


(见EAFP)

老实说,你的方法似乎不错。如果您希望对不同的情况有更多的控制,可以这样做:

vars = [received_dict[key] for key in ["value","key"] if key in received_dict.keys()]
if not vars:
    raise KeyError("No 'value' or 'key' keys exist in dictionary")
elif len(vars)==2:
    raise KeyError("Both 'value' and 'key' keys exist in dictionary")
else:
    var=vars[0]
这种方法的唯一优点是,当两个键都存在时,它也会抛出一个错误。如果您不关心“均存在”错误情况,也不介意在发生“均不存在”错误情况时引发不同类型的错误,那么您可以执行以下代码以获得一行代码:

var = [received_dict[key] for key in ["value","key"] if key in received_dict.keys()][0]

您可以在中使用
来测试成员资格。如果在received_dict
中使用“key”,以此类推。缩写:
received_dict.get(“value”,received_dict.get(“key”,“”))
.Hmm,如果两个键都不存在,则使用False作为默认值。抛出异常可能更好。