Suppression d'éléments de façon aléatoire à partir d'un dictionnaire
Comment puis-je supprimer des éléments aléatoires à partir d'un dictionnaire en Python?
Je dois enlever un certain nombre d'éléments à partir d'un dictionnaire et j'ai donc essayé d'utiliser dict.popitem
j'ai pensé que c'était aléatoire, mais il semble qu'il ne l'est pas.
Comme le docs dire:
Retirer et de retourner un arbitraire (clé,
la valeur de la paire à partir du dictionnaire.
Pour mon problème, supposons que j'ai un dictionnaire comme (un exemple):
>>> d = dict(zip((string.ascii_lowercase), range(1, 10)))
>>> d
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8}
Maintenant, j'ai besoin de supprimer certains éléments de celui-ci (le nombre est spécifié par l'utilisateur).
J'ai donc écrit ceci:
>>> for _ in range(4): # assume 4 items have to removed
... d.popitem()
...
('a', 1)
('c', 3)
('b', 2)
('e', 5)
Mais le problème avec ce code, à chaque fois que le script est exécuté, popitem()
pop exactement les mêmes éléments. Vous êtes libre de le tester, j'ai déjà essayé plusieurs fois.
Donc ma question est:
- Pourquoi n'est-ce pas
popitem()
de travail comme il le devrait? Est la suppression arbitraire des éléments non aléatoire? - Comment puis-je supprimer des éléments aléatoires à partir d'un dictionnaire?
Alors qu'est-ce
arbitrary
?Probablement à l'intérieur de la commande de la paire (qui est également reflété par l'itération de l'ordre - qui, rappelons-le, est abritary mais pas au hasard). Dicts sont "non ordonnée", mais l'ordre dans lequel les éléments sont stockés à l'intérieur est déterministe - si vous prenez paramètres en compte, normalement, vous ne pensez même pas: Les hachages de clés, de l'ordre d'insertion, les collisions, le nombre total d'objets... en créant le même dictionnaire de la même façon, en effet, de créer le même interne de la commande.
Il doit être arbitraires, car un dictionnaire lui-même est organisé de manière arbitraire.
OriginalL'auteur user225312 | 2011-01-26
Vous devez vous connecter pour publier un commentaire.
Est-ce que vous parlez?
Il est appelé "rétrécissement perceptif". Vous réduit votre attention pour tout comprendre sur
popitem
même si ce n'était pas la résolution de votre problème. Lorsque les choses semblent difficiles, vous êtes probablement de faire le mal. Stop. Regardez autour de vous. Prendre un thé. Pensez à quelque chose de plus simple.Grand stade, cependant, j'ai regardé "rétrécissement perceptif" et il semble avoir quelque chose à voir avec la façon dont le cerveau se développe pendant l'enfance. Un peu plus de Googler tourné vers le haut "l'inattention de la cécité" et "cognitive tunneling".
gladwell.com/2000/2000_08_21_a_choking.html
le lien vers l'article est mort. Pouvez-vous trouver une autre source quelque part? Merci!
OriginalL'auteur S.Lott
popitem()
est arbitraire mais pas au hasard. Si vous souhaitez accéder à un élément aléatoireOriginalL'auteur Vlad H
La suppression d'un "arbitraire" signifie que la fonction peut supprimer n'importe quel élément il aime. Cela ne signifie pas qu'il doit être particulièrement aléatoire.
Pour de vrai hasard, vous devez utiliser le
au hasard
module. Par exemple:OriginalL'auteur sth
Arbitraire ne signifie pas la même chose que le hasard. Arbitraire signifie simplement que tout les articles peuvent être retournés et rien ne doit être assumée quant à l'ordre, ils sont renvoyés dans.
Je ne prétendons pas que c'est la meilleure ou la plus efficace, mais l'une:
OriginalL'auteur cledoux
Pour la suppression d'un nombre spécifié d'éléments, je voudrais utiliser
random.sample
au lieu de faire des appels répétés à ladict.keys
etrandom.choice
OriginalL'auteur aaronasterling
essayer celui-ci
J'essayais d'atteindre le même { arbitrairement un article de dictionnaire } mais il est toujours supprimé url
mais quand je l'ai changé pour
titre est supprimé
Je suppose qu'Il supprime les éléments de la liste qui a la plus haute valeur ASCII, \
juste deviner
popitem
était ce que je cherchais!OriginalL'auteur Pratik