web-dev-qa-db-fra.com

En Python comment obtenir une vue partielle d'un dict?

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

24
hernanavella

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])
26
Retard
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.

4
BrenBarn

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

3
Neb

É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])
2
Michal

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

2
Little Bobby Tables

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 . OrderedDicts se souviennent de l'ordre des clés lorsque vous les avez saisies.

1
user554546

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])

x[0] est la clé de chaque paire clé/valeur.

1
heltonbiker

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

1
Wassadamo