使用解压缩方法来更新字典的优点

时间:2019-04-08 21:39:12

标签: python python-3.x dictionary kwargs

如果使用kwargs更新字典键确实有真正的优势,我会感到困惑。请遵循以下示例:

def example():
    return {'a':1,'b':2,'c':3}

使用kwargs更新字典:

   {**example(),'b':9}
>> {'a': 1, 'b': 9, 'c': 3}

我还可以使用类似的东西:

example['b'] = 9

有人可以告诉我使用解压缩方法更新dict或给我一些阅读材料的好处吗? E特别是在涉及嵌套字典时,因为这是我看到的地方。

2 个答案:

答案 0 :(得分:1)

{**example(),'b':9}通过解压缩example()返回的字典,然后用键b更新新字典来创建新字典,而example['b'] = 9更新键{{1 }} b就位,并且不会创建新的dict。

答案 1 :(得分:0)

我认为您正在将 private void createCameraPreviewSessionLocked() { try { SurfaceTexture texture = mPreviewView.getSurfaceTexture(); texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); Surface surface = new Surface(texture); mPreviewRequestBuilder = mBackCameraDevice.createCaptureRequest( CameraDevice.TEMPLATE_PREVIEW); mPreviewRequestBuilder.addTarget(surface); mBackCameraDevice.createCaptureSession(Arrays.asList( surface, mJpegImageReader.get().getSurface(), mRAWImageReader.get().getSurface(), persistentRecorderSurface ), new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession session) { synchronized (mCameraStateLock) { if (mBackCameraDevice == null) { return; } try { setup3AControlsLocked(mPreviewRequestBuilder); session.setRepeatingRequest(mPreviewRequestBuilder.build(), mPreCaptureCallback, mBackgroundHandler); mState = CameraStates.PREVIEW; } catch (CameraAccessException | IllegalStateException e) { e.printStackTrace(); return; } mSession = session; } } @Override public void onConfigureFailed(CameraCaptureSession session) { showToast("Failed to configure camera."); } }, mBackgroundHandler); } catch (CameraAccessException e) { e.printStackTrace(); } } 函数参数与**的解压缩方法混淆。 **kwargs只是将**返回的字典解压缩为键/值对,然后使用传递给字典构造函数的附加键/值对example()创建新的字典。

如果您一次只添加一个键/值对,那么此方法仅像'b':9这样分配就没有太大的价值,但是如果您想将两个字典合并为一个字典,那么执行example['b'] = 9然后遍历并将两个字典中的每个键/值对添加到新字典中会更加有效。 此方法仅适用于Python 3.5及更高版本(使用new_dict = {**old_dict, **old_dict1}的早期版本)。这里还有更多code关于python解包方法和kwarg的信息。