Est-il possible d'obtenir une vue partielle d'un dict
en Python analogue à pandas df.tail()/df.head()
. Dites que vous avez un dict
très long, et vous voulez juste vérifier certains des éléments (le début, la fin, etc.) du dict
. Quelque chose comme:
dict.head(3) # To see the first 3 elements of the dictionary.
{[1,2], [2, 3], [3, 4]}
Merci
Désir un peu perverti, mais vous pouvez l'obtenir en utilisant ceci
dict(islice(mydict.iteritems(), 0, 2))
ou pour de courts dictionnaires
# Python 2.x
dict(mydict.items()[0:2])
# Python 3.x
dict(list(mydict.items())[0:2])
def glance(d):
return dict(itertools.islice(d.iteritems(), 3))
>>> x = {1:2, 3:4, 5:6, 7:8, 9:10, 11:12}
>>> glance(x)
{1: 2, 3: 4, 5: 6}
Pourtant:
>>> x['a'] = 2
>>> glance(x)
{1: 2, 3: 4, u'a': 2}
Notez que l'insertion d'un nouvel élément a changé ce que les "premiers" trois éléments étaient d'une manière imprévisible. C'est ce que les gens veulent dire lorsqu'ils vous disent que les pronostics ne sont pas ordonnés. Vous pouvez obtenir trois éléments si vous le souhaitez, mais vous ne pouvez pas savoir lesquels ils seront.
Je sais que cette question a 3 ans mais ici une version Pythonic (peut-être plus simple que les méthodes ci-dessus) pour Python 3.*
:
[print(v) for i, v in enumerate(my_dict.items()) if i < n]
Il affichera les premiers n
éléments du dictionnaire my_dict
Éditer:
in Python 3.x: Sans utiliser les bibliothèques, il est possible de le faire de cette façon. Utilisez la méthode:
.articles()
qui renvoie une liste de clés de dictionnaire avec des valeurs.
Il faut le convertir en une liste sinon une erreur se produira l'objet 'my_dict' n'est pas indexable. Puis convertissez-le dans le dictionnaire. Maintenant, il est prêt à découper avec des crochets.
dict(list(my_dict.items())[:3])
one-up-ing @ Neb's solution with Python 3 dict comprehension:
{k: v for i, (k, v) in enumerate(my_dict.items()) if i < n}
Il renvoie un dict plutôt que des impressions
De la documentation :
Détail de l'implémentation de CPython: les clés et les valeurs sont répertoriées dans un ordre arbitraire qui n'est pas aléatoire, varie selon les implémentations Python, et dépend de l'historique des insertions et suppressions du dictionnaire.
Je n'ai joué que dans le meilleur des cas avec d'autres implémentations Python (par exemple PyPy, IronPython, etc.), donc je ne sais pas avec certitude si c'est le cas dans tous les Python, mais l'idée générale d'un dict/hashmap/hash/etc est que les clés ne sont pas ordonnées.
Cela étant dit, vous pouvez utiliser un OrderedDict
de la bibliothèque collections
. OrderedDict
s se souviennent de l'ordre des clés lorsque vous les avez saisies.
Si les clés sont en quelque sorte triables, vous pouvez le faire:
head = dict([(key, myDict[key]) for key in sorted(myDict.keys())[:3]])
Ou peut-être:
head = dict(sorted(mydict.items(), key=lambda: x:x[0])[:3])
Où x[0]
est la clé de chaque paire clé/valeur.
Pour ceux qui préfèrent résoudre ce problème avec pandas
dataframes. Remplissez simplement votre dictionnaire mydict
dans un cadre de données, faites-le pivoter et obtenez les premières lignes:
pd.DataFrame(mydict, index=[0]).T.head()
0 hi0 1 hi1 2 hi2 3 hi3 4 hi4