7
votes

Supprimer l'élément dans la liste dans un dictionnaire

Dans un grand dictionnaire, similaire à xxx

Comment puis-je supprimer rapidement le "Four" dans les listes?

Edit

est Il y a un moyen de relier les quatre dans les listes? Comme dans, éliminant l'un élimine les autres.


0 commentaires

5 Réponses :


9
votes

Itérate sur les valeurs du dictionnaire et supprimez le 4 de chaque liste:

for a in d.itervalues():
    a.discard(4)


0 commentaires

1
votes

Essayez ceci pour supprimer les 4s:

for i in d:
    while 4 in d[i]:
       d[i].remove(4)


6 commentaires

Non seulement le code est incorrect, il s'agirait également d'une approche inefficace incroyablement redondante si elle était correcte. ( .ReMove () ne prend pas d'index; c'est .pop () qui fait cela. Mutant également une liste pendant que vous êtes une mauvaise idée. Enfin, dans sur une liste nécessite de l'itération de toute façon, en ajoutant une instruction Extra si pour vérifier si la valeur que vous souhaitez supprimer est dans la liste, n'est pas plus efficace, Cela fait que les choses prennent plus de temps.)


@Amber merci d'avoir souligné cela. S'est confondu par les choses. :( Qu'en est-il d'utiliser tandis que 4 en d [i] ? Toute suggestion? Utiliser "In '" toujours pas trop efficace THO ..


@Louis_pig Une meilleure approche serait de mettre tandis que TRUE: D [i] .ReMove (4) à l'intérieur d'un essai / sauf (semblable à la réponse de Sven).


@ F.J Merci pour la réponse. Je comprends que la réponse de Sven est rapide et efficace. Je pensais utiliser une exception pour faire "Vérification de la condition" n'est pas une bonne pratique de programmation.


@Louis_PIG qui dépend de la langue, dans Python, il est parfaitement acceptable d'utiliser des exceptions pour quelque chose comme ça. Ce style de programmation est appelé EAFP , court pour "plus facile à demander pardon que l'autorisation ".


@ F.J Merci beaucoup de me faire savoir à ce sujet. Foncé!



0
votes

Vous n'avez pas mentionné ce que vous voulez arriver s'il y a des doublons dans votre liste. La solution que j'ai écrite (itérer puis supprimer ..) ne gère pas les doublons.

>>> d = {'a':[1,2,3,4],'b':[1,2,3,4,5,6],'c':[1,2],'d':[1,4],'e':[1,4,4]}
>>> for l in d.values():
...     if 4 in l: l.remove(4)
... 
>>> d
{'a': [1, 2, 3], 'c': [1, 2], 'b': [1, 2, 3, 5, 6], 'e': [1, 4], 'd': [1]}


0 commentaires

0
votes

Si les valeurs contiennent des doublons de 4, vous pouvez utiliser quelque chose comme ceci:

>>> d
{'a': [1, 2, 3], 'c': [1, 2], 'b': [1, 2, 3, 5, 6], 'd': [1]}


0 commentaires

1
votes

Il semble que vous puissiez bénéficier de votre dictionnaire "symétrique", vous pouvez faire quelque chose comme ceci: xxx pré>

et utilisez-le quelque chose comme ceci: P>

>>> d = {'a': set([1, 2, 3, 4]),
         'b': set([1, 2, 3, 4, 5, 6]),
         'c': set([1, 2]),
         'd': set([1, 4])}
>>> make_symmetric(d)
>>> d
{1: set(['a', 'c', 'b', 'd']),
 2: set(['a', 'c', 'b']),
 3: set(['a', 'b']),
 4: set(['a', 'b', 'd']),
 5: set(['b']),
 6: set(['b']),
 'a': set([1, 2, 3, 4]),
 'b': set([1, 2, 3, 4, 5, 6]),
 'c': set([1, 2]),
 'd': set([1, 4])}
>>> remove(d, 4)
>>> d
{1: set(['a', 'c', 'b', 'd']),
 2: set(['a', 'c', 'b']),
 3: set(['a', 'b']),
 5: set(['b']),
 6: set(['b']),
 'a': set([1, 2, 3]),
 'b': set([1, 2, 3, 5, 6]),
 'c': set([1, 2]),
 'd': set([1])}
>>> add(d, 'd', 4)
>>> d
{1: set(['a', 'c', 'b', 'd']),
 2: set(['a', 'c', 'b']),
 3: set(['a', 'b']),
 4: set(['d']),
 5: set(['b']),
 6: set(['b']),
 'a': set([1, 2, 3]),
 'b': set([1, 2, 3, 5, 6]),
 'c': set([1, 2]),
 'd': set([1, 4])}


0 commentaires