Cómo calcular stndard desviación de conteo de pares de valores

En numpy la función para el cálculo de la norma deviaiton espera de una lista de valores como [1, 2, 1, 1] y calcula la desviación estándar a partir de ellas. En mi caso, tengo una lista anidada de valores y cuenta como [[1, 2], [3, 1]], donde la primera lista que contiene los valores y la segunda contiene el recuento de la frecuencia de los valores correspondientes a aparecer.

Estoy buscando un limpio manera de calcular la desviación estándar para una determinada lista de arriba.

Ya tengo una solución de trabajo, que convierte el anidado de valor de recuento de lista en un aplanado de la lista de valores y calcula la desviación estándar con la función de arriba, pero me parece que no es que agradable y no habría otra opción.

Un mínimo ejemplo de trabajo de mi solución es

import numpy as np

# The usual way
values = [1,2,1,1]
deviation = np.std(values)
print(deviation)

# My workaround for the problem
value_counts = [[1, 2], [3, 1]]
values, counts = value_counts
flattened = []
for value, count in zip(values, counts):
    # append the current value count times
    flattened = flattened + [value]*count
deviation = np.std(flattened)
print(deviation)

La salida es

0.4330127018922193
0.4330127018922193

Gracias por todas las ideas o sugerencias :)