Respuestas:
Sí, es exactamente lo mismo en Python 2 :
d.values()
En Python 3 (donde dict.values
devuelve una vista de los valores del diccionario):
list(d.values())
[d[k] for k in d]
que funciona tanto para python2.xy 3.x ( tenga en cuenta que en realidad no estoy sugiriendo que use esto ). Por lo general, no necesita una lista de valores, por lo que d.values()
está bien.
d.itervalues()
para devolver un iterador de valores de diccionario y evitar una lista.
d.itervalues()
y en la mayoría de los casos solo necesitará iterar y no necesitará una lista.
Puede usar * operator para desempaquetar dict_values:
>>> d = {1: "a", 2: "b"}
>>> [*d.values()]
['a', 'b']
o objeto de lista
>>> d = {1: "a", 2: "b"}
>>> list(d.values())
['a', 'b']
* operator
Debe haber una, y preferiblemente solo una, forma obvia de hacerlo.
Por list(dictionary.values())
lo tanto, es el único camino .
[*L]
vs. [].extend(L)
vs.list(L)
small_ds = {x: str(x+42) for x in range(10)}
small_df = {x: float(x+42) for x in range(10)}
print('Small Dict(str)')
%timeit [*small_ds.values()]
%timeit [].extend(small_ds.values())
%timeit list(small_ds.values())
print('Small Dict(float)')
%timeit [*small_df.values()]
%timeit [].extend(small_df.values())
%timeit list(small_df.values())
big_ds = {x: str(x+42) for x in range(1000000)}
big_df = {x: float(x+42) for x in range(1000000)}
print('Big Dict(str)')
%timeit [*big_ds.values()]
%timeit [].extend(big_ds.values())
%timeit list(big_ds.values())
print('Big Dict(float)')
%timeit [*big_df.values()]
%timeit [].extend(big_df.values())
%timeit list(big_df.values())
Small Dict(str)
256 ns ± 3.37 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
338 ns ± 0.807 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
336 ns ± 1.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Small Dict(float)
268 ns ± 0.297 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
343 ns ± 15.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
336 ns ± 0.68 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Big Dict(str)
17.5 ms ± 142 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
16.5 ms ± 338 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
16.2 ms ± 19.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Big Dict(float)
13.2 ms ± 41 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
13.1 ms ± 919 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
12.8 ms ± 578 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Hecho en Intel (R) Core (TM) i7-8650U CPU @ 1.90GHz.
# Name Version Build
ipython 7.5.0 py37h24bf2e0_0
* operator
es más rápidolist()
es quizás un poco más rápidolist(L)
, porque "Debe haber una, y preferiblemente solo una, forma obvia de hacerlo".
Sigue el siguiente ejemplo:
songs = [
{"title": "happy birthday", "playcount": 4},
{"title": "AC/DC", "playcount": 2},
{"title": "Billie Jean", "playcount": 6},
{"title": "Human Touch", "playcount": 3}
]
print("====================")
print(f'Songs --> {songs} \n')
title = list(map(lambda x : x['title'], songs))
print(f'Print Title --> {title}')
playcount = list(map(lambda x : x['playcount'], songs))
print(f'Print Playcount --> {playcount}')
print (f'Print Sorted playcount --> {sorted(playcount)}')
# Aliter -
print(sorted(list(map(lambda x: x['playcount'],songs))))