2010-12-01 3 views
1

Je dois assigner les majuscules aux nombres dans un dictionnaire mais avec une lettre S pas là.Sauter une lettre dans le dictionnaire

ie.

dans ce alphadict = dict((x, i) for i, x in enumerate(string.ascii_uppercase)) J'ai actuellement tous les alphabets du dictionnaire.

Quelle est la manière la plus simple de supprimer l'entrée pour S et le reste des valeurs vers la gauche.

S'il y a une autre façon de créer ce dictionnaire ne dire .....


Je suis aussi besoin de ce ..... Maintenant, je reçois un certain nombre d'utilisateurs ... .. Ce numéro dans le dictionnaire doit être attribué S et tous les autres éléments du dictionnaire peut être réajusté ....

-à-dire dire que l'utilisateur me donne 3 le dictionnaire devrait ressembler à

A 1- 0- B 2- C 3- S et de repos suivent de D à Z sans S .......

S'il vous plaît aider ..... Merci beaucoup ....

Répondre

0

Si je vous comprends bien, la chose à faire semble plus simple que ce serait d'abord créer une liste avec les lettres dans l'ordre que vous voulez, puis convertir en un dictionnaire:

import string 

sans_S = [c for c in string.ascii_uppercase if c is not 'S'] 
user_choice = 3 
alphabet = sans_S[0:user_choice] + ['S'] + sans_S[user_choice:] 

print alphabet 
# ['A', 'B', 'C', 'S', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 
# 'O', 'P', 'Q', 'R', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] 

# now create dictionary using modified list 
alphadict = dict((x, i) for i, x in enumerate(alphabet)) 

# print out alphadict sorted by item values (not a necessary part of answer) 
revdict = dict((v,k) for k,v in alphadict.iteritems()) 
print '{', 
for v in sorted(alphadict.itervalues()): 
    print "%r:%2d," % (revdict[v], v), 
print '}' 

# { 'A': 0, 'B': 1, 'C': 2, 'S': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8, 
# 'I': 9, 'J':10, 'K':11, 'L':12, 'M':13, 'N':14, 'O':15, 'P':16, 'Q':17, 
# 'R':18, 'T':19, 'U':20, 'V':21, 'W':22, 'X':23, 'Y':24, 'Z':25, } 
4

La façon la plus simple est de supprimer la lettre 'S' avant créer le dictionnaire.

Utilisez string.ascii_uppercase.replace('S', '') au lieu de string.ascii_uppercase.

+0

Pouvez-vous éventuellement aider le problème donné dans la mise à jour .... Merci –

1

alphadict = dict((x, i) for i, x in enumerate(string.ascii_uppercase) if x != 'S')

+1

Cela ne fonctionnera pas. La lettre "Z" recevra toujours la valeur 26, pas 25 (c'est-à-dire décalée d'un à "gauche"). –

+0

Cela saute la valeur de S aussi ..... donc ce n'est pas correct pour ce que je veux .... Merci beaucoup cependant .... –

0

pour Q2

def makealphabet(i): 
    a=list(string.ascii_uppercase) 
    a[i:i]=a.pop(a.index('S')) 
    return ''.join(a) 
0

Si vous voulez faire des opérations comme celle de votre mise à jour à la question, je stocker les données dans une liste au lieu d'un droit dictionnaire depuis le début :

l = list(string.ascii_uppercase) 
l.remove('S') 
print l 
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] 
l.insert(3, 'S') 
print l 
['A', 'B', 'C', 'S', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] 

Les lettres peuvent maintenant être accédées par leurs indices comme s'ils étaient dans un dictionnaire.

Questions connexes