在字典中略读一封信

时间:2010-12-01 23:01:44

标签: python

我需要将大写字母分配给字典中的数字,但不存在一个字母S.

在这个alphadict = dict((x, i) for i, x in enumerate(string.ascii_uppercase))我目前有字典的所有字母表。

删除S条目并将其余值移到左侧的最简单方法是什么。

如果还有其他方法来创建这个字典,请告诉.....


我也需要这个.....现在我从用户那里得到一个号码......字典中的这个号码应该被分配S,所有其他字典项目都可以重新调整.... / p>

即说用户给我3字典应该是

0- A. 1- B 2- C 3- S. 和休息从D到Z,没有S .......

请帮忙.....非常感谢....

5 个答案:

答案 0 :(得分:3)

最简单的方法是在创建字典之前删除字母'S'

使用string.ascii_uppercase.replace('S', '')代替string.ascii_uppercase

答案 1 :(得分:1)

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

答案 2 :(得分:0)

for Q2

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

答案 3 :(得分: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']

现在可以通过索引访问这些字母,就像它们在字典中一样。

答案 4 :(得分: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, }