J'essaie de sortir la somme des valeurs de consonne et de voyelle à partir d'un dictionnaire contenant letter_number_pairs comme indiqué ci-dessous:

vowels = ['a','e','i','o','u']
consonants = ['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z']
letter_number_pairs = {'a': 1,'b': 8,'c': 3,'f': 3,'h': 8,'i': 2,'l': 4,'p': 2,'q': 1,'s': 5,'u': 9,'w': 0,'y': 5,'z': 2}

La question que je me pose est: "Puis-je additionner les valeurs des voyelles et additionner les valeurs des consonnes en un seul passage?" Autrement dit, puis-je éviter d'exécuter deux passes du dictionnaire comme indiqué dans mon exemple de travail ci-dessous:

vowel_value_sum     = sum(value for (letter, value) in letter_number_pairs.items() if letter in vowels)
consonant_value_sum = sum(value for (letter, value) in letter_number_pairs.items() if letter in consonants)
1
John Forbes 16 avril 2018 à 15:48

3 réponses

Meilleure réponse

Restructurez simplement vos données vowels et consonants:

letters = {'vowels':['a','e','i','o','u'], 'consonants':['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z']}
letter_number_pairs = {'a': 1,'b': 8,'c': 3,'f': 3,'h': 8,'i': 2,'l': 4,'p': 2,'q': 1,'s': 5,'u': 9,'w': 0,'y': 5,'z': 2}
final_sums = {a:sum(letter_number_pairs.get(i, 0) for i in b) for a, b in letters.items()}

Production:

{'vowels': 12, 'consonants': 41}
2
Ajax1234 16 avril 2018 à 13:52

Oui, cela est possible en un seul passage.

Notez que les vérifications d'inclusion set internes sont O (1).

a, b = 0, 0

vowels = set(vowels)

for k, v in letter_number_pairs.items():
    if k in vowels:
        a += v
    else:
        b += v

print([a, b])

# [12, 41]
2
jpp 16 avril 2018 à 14:59

Si vous voulez en une seule itération, vous pouvez essayer cette approche:

vowels = ['a','e','i','o','u']
consonants = ['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z']
letter_number_pairs = {'a': 1,'b': 8,'c': 3,'f': 3,'h': 8,'i': 2,'l': 4,'p': 2,'q': 1,'s': 5,'u': 9,'w': 0,'y': 5,'z': 2}

vowel_sum=[]
conso_sum =[]
for i in letter_number_pairs:
    if i in vowels:
        vowel_sum.append(letter_number_pairs[i])
    elif i in consonants:
        conso_sum.append(letter_number_pairs[i])
    else:
        pass    #in case of special characters


print(sum(vowel_sum))
print(sum(conso_sum))

Production:

12
41
1
Aaditya Ura 16 avril 2018 à 13:33