无法获得字典键看起来像我想要的那样

时间:2012-08-30 02:48:23

标签: python dictionary

我需要以这种格式'/ cat /'获得我的字典键,但我不断得到多个正斜杠。这是我的代码:

 # Defining the Digraph method #
 def digraphs(s):
      dictionary = {}
      count = 0;
      while count <= len(s):
          string = s[count:count + 2]
          count += 1
          dictionary[string] = s.count(string)
      for entry in dictionary:
          dictionary['/' + entry + '/'] = dictionary[entry]
          del dictionary[entry]
      print(dictionary)
 #--End of the Digraph Method---#

这是我的输出:

我这样做:

有向图('我的猫在帽子里')

{'///in///': 1, '/// t///': 1, '/// c///': 1, '//s //': 1, '/my/': 1, '/n /': 1, '/e /': 1, '/ h/': 1, '////ha////': 1, '//////': 21, '/is/': 1, '///ca///': 1, '/he/': 1, '//th//': 1, '/t/': 3, '//at//': 2, '/t /': 1, '////y ////': 1, '/// i///': 2}

2 个答案:

答案 0 :(得分:3)

在Python中,通常不应在修改对象时迭代对象。不要修改你的字典,而是创建一个新字典:

new_dict = {}

for entry in dictionary:
    new_dict['/' + entry + '/'] = dictionary[entry]

return new_dict

或更紧凑(Python 2.7及以上版本):

return {'/' + key + '/': val for key, val in dictionary.items()}

更好的方法是首先跳过创建原始字典:

# Defining the Digraph method #
def digraphs(s):
    dictionary = {}

    for count in range(len(s)):
        string = s[count:count + 2]
        dictionary['/' + string + '/'] = s.count(string)

    return dictionary
#--End of the Digraph Method---#

答案 1 :(得分:2)

当你循环覆盖它时,你正在向字典添加条目,所以你的新条目也包含在循环中,并再次添加额外的斜杠。更好的方法是创建一个包含所需新密钥的新字典:

newDict = dict(('/' + key + '/', val) for key, val in oldDict.iteritems())

正如@Blender指出的那样,如果你使用的是Python 3,你也可以使用字典理解:

{'/'+key+'/': val for key, val in oldDict.items()}