web-dev-qa-db-fra.com

Comment puis-je obtenir une liste de valeurs de dict?

Comment puis-je obtenir une liste des valeurs dans un dict en Python?

En Java, obtenir les valeurs d'une carte en tant que liste est aussi simple que de faire list = map.values();. Je me demande s’il existe un moyen aussi simple en Python d’obtenir une liste de valeurs d’un dict.

161
Muhd

Oui, c'est exactement la même chose dans Python 2 :

d.values()

Dans Python 3 (où dict.values renvoie plutôt un vue des valeurs du dictionnaire):

list(d.values())
256
jamylak

Considérant Python3, qu'est-ce qui est plus rapide?

small_ds = {x: str(x+42) for x in range(10)}
small_di = {x: int(x+42) for x in range(10)}

print('Small Dict(str)')
%timeit [*small_ds.values()]
%timeit list(small_ds.values())

print('Small Dict(int)')
%timeit [*small_di.values()]
%timeit list(small_di.values())

big_ds = {x: str(x+42) for x in range(1000000)}
big_di = {x: int(x+42) for x in range(1000000)}

print('Big Dict(str)')
%timeit [*big_ds.values()]
%timeit list(big_ds.values())

print('Big Dict(int)')
%timeit [*big_di.values()]
%timeit list(big_di.values())
Small Dict(str)
284 ns ± 50.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
401 ns ± 53 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Small Dict(int)
308 ns ± 79.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
428 ns ± 62.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Big Dict(str)
29.5 ms ± 13.8 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
19.8 ms ± 1.3 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

Big Dict(int)
22.3 ms ± 1.4 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
21.2 ms ± 1.49 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

Le résultat

  1. Pour les grands dictionnaires, là où ça compte list() est plus rapide
  2. Pour les petits dictionnaires, * operator est plus rapide
3
Ronald Luc

Vous pouvez utiliser * opérateur pour décompresser les valeurs dict_values:

>>> d = {1: "a", 2: "b"}
>>> [*d.values()]
['a', 'b']

ou objet liste

>>> d = {1: "a", 2: "b"}
>>> list(d.values())
['a', 'b']
3
Vlad Bezden

Suivez l'exemple ci-dessous -

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))))
0
Mohan. A