2010-12-01 2 views
1

Мне нужно назначить прописные номера номерам в словаре, но с одной буквой S не существует.Пропустить письмо на английском языке

ie.

в этом alphadict = dict((x, i) for i, x in enumerate(string.ascii_uppercase)) У меня есть все алфавиты словаря.

Каков самый простой способ удалить запись для S и сдвинуть остаток значений влево.

Если есть какой-то другой способ, чтобы создать этот словарь действительно сказать .....


Я тоже в этом нуждается ..... Теперь я получаю номер от пользователя ... .. Это число в словаре должны быть назначены S и все другие элементы словаря можно перенастроить ....

т.е. сказать, пользователь дает мне 3 словаря должен выглядеть

0- 1- B 2- C 3- S и отдыха следуют из D до Z без S .......

Пожалуйста, помогите ..... спасибо ....

ответ

0

Если я вас понимаю правильно, самая простая вещь, чтобы сделать, как он хотел бы, чтобы сначала создать список с буквами в порядке, вы хотите, а затем преобразовать его в словарь:

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

Самый простой способ, чтобы удалить букву 'S' перед вами создайте словарь.

Использовать string.ascii_uppercase.replace('S', '') вместо string.ascii_uppercase.

+0

Могли бы вы возможно, поможет проблема, указанная в обновлении .... Спасибо – 2010-12-01 23:14:11

1

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

+1

Это не сработает. Буква «Z» будет по-прежнему получать значение 26, а не 25 (т. Е. Сдвинутое до «левого»). – 2010-12-01 23:09:27

0

для Q2

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

Если вы хотите, чтобы делать операции, как в вашем обновлении на вопрос, я хотел бы хранить данные в списке вместо словаря справа от начала :

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'] 

Теперь к буквам можно получить доступ к индексам так же, как если бы они находились в словаре.

Смежные вопросы