1
votes

Comment vérifier si une valeur de liste est dans un dictionnaire

J'ai une liste et je veux vérifier si un pourcentage des éléments de la liste correspond dans le dictionnaire. Donc d'abord je fais pour n'importe quelle valeur.

J'ai utilisé n'importe quelle fonction mais ne renvoie qu'un seul False. Plus tard, j'ai essayé ceci:

d = {'key1': ['a', 'b', 'c'], 'key2': ['b', 'l'], 'key3': ['m']}
key_words = ['a', 'b', 'l']
result = [test in d.values() for test in key_words]

Je m'attendais à obtenir [True, True, False]. Mais la sortie est [False, False, False]. Je pense que je ne boucle pas dans toute la liste.


3 commentaires

utilisez-vous Python> = 3.7?


vos valeurs de D résulteraient en un tableau / itérable de tableaux. Donc a! = [A, b, c].


@Fallenreaper - voulez-vous dire une liste de listes?


4 Réponses :


1
votes

d.values ​​() vous rend [['a', 'b', 'c'], ['b', 'l'], ['m ']] .

Notez que ce n'est pas la même chose que ['a', 'b', 'c', 'l', 'm'] , et donc 'a' dans d.values ​​() ne sera jamais True .


0 commentaires

1
votes
x = zip(key_words, d.values())
[a in b for a, b in x]

0 commentaires

0
votes

Vous devez parcourir le dictionnaire et vérifier si une valeur se trouve dans votre tableau key_words .

d = {
    'key1': ['a', 'b', 'c'],
    'key2': ['b', 'l'],
    'key3': ['m']
}

key_words = ['a', 'b', 'l']

for item in d.values():
    arr = []
    for i in item:
        if i in key_words:
            arr.append(True)
        else:
            arr.append(False)
    print(arr)


1 commentaires

Merci, c'est exactement ce que je veux. J'ai une autre question: comment puis-je appliquer cela à une colonne DataFrame?



0
votes

Je pense que vous devriez le faire.

d = {'key1': ['a', 'b', 'c'], 'key2': ['b', 'l'], 'key3': ['m']}
key_words = ['a', 'b', 'l']
data = set([])
for arr in d.values():
  for i in arr:
    data.add(i)
result = [i in data for i in key_words]

Cela créera un ensemble d'options afin qu'il n'y ait pas de doublons et parcourra ces données. L'ensemble est utilisé pour maintenir le nombre de valeurs bas car vous cherchez simplement à voir si le caractère existe, pas combien de fois il existe.


0 commentaires