相关疑难解决方法(0)

Python的哈希函数顺序背后的逻辑是什么?

我们知道,Python的一些数据结构使用哈希表来存储像set或的项目dictionary.所以这些对象没有顺序.但似乎对某些数字序列而言并非如此.

例如,请考虑以下示例:

>>> set([7,2,5,3,6])
set([2, 3, 5, 6, 7])

>>> set([4,5,3,0,1,2])
set([0, 1, 2, 3, 4, 5])
Run Code Online (Sandbox Code Playgroud)

但是,如果我们进行一些小改动,它就没有排序:

>>> set([8,2,5,3,6])
set([8, 2, 3, 5, 6])
Run Code Online (Sandbox Code Playgroud)

所以问题是:Python的哈希函数如何对整数序列起作用?

python hashtable python-2.7 python-3.x python-internals

4
推荐指数
1
解决办法
291
查看次数

排序字典 - 它被声明为python的顺序

这里我添加了一个代码来生成xml_tags,这就是我的输出:

md5 value = "sdfhsdkjgfjw35378563"
repOperation value = "push"
size value = "toolarge"
images value = "/home/rakesh/from_t_jack/imag1.ipds"
status value = "completed"
replication value = "mode"
sdlist value = "f:"
Run Code Online (Sandbox Code Playgroud)

我用过字典.我无法弄清楚sort我的字典.我想按照我声明的顺序对字典进行排序和打印.另一个问题是,如果在第6行观察到输出,则输出有点逆转,我期待:mode value = "replication".但输出是颠倒的.我不知道为什么它会以这种方式表现.我想知道如何解决这两个问题.这是我的代码.

  def generate_tag(name,val):

     full_tag = ''+name+' value = "'+val+'"'
     return full_tag



  def auto_xml(sdList,repOperation,images,status,md5):


            tags =          {'repOperationTag'  :{'repOperation_tag_name':'repOperation' ,
                                                  'repOperation_val'     : repOperation },

                            'modeTag'             :{'mode_tag_name':'mode' ,
                                                    'mode_val'     : 'replication' },


                             'imagesTag'        :{'images_tag_name': 'images',
                                                  'images_val'     : images  },

                             'statusTag'        :{'status_tag_name':'status' ,
                                                  'status_val'     : status},

                            'sizeTag'          :{'size_tag_name':'size' …
Run Code Online (Sandbox Code Playgroud)

python dictionary

1
推荐指数
1
解决办法
324
查看次数

Python字典中的整数键是否按优先级排序和排序?

我在OS X Mavericks上使用python 2.7.5,并且看到字典用于生成简单文本菜单的行为异常。我的问题是:Python字典中的整数键是否按优先级排序和排序? 我可以看到mainMenu_1字典(包含一些数字键和一些字符串键)对整数键进行排序,然后以预期的随机顺序显示字符串键。mainMenu_2按预期随机化。

来自python 2.7.8 docs:

“最好将字典视为一组无序的键:值对,要求键是唯一的(在一个字典中)。”

mainMenu_1 = {
   0: 'README',
   1: 'New Set',
   2: 'View Sets',
   3: 'Quiz',
   4: 'Scores',
   5: 'Configuration Settings',
   'Q': 'Quit',
   'a': 'additional letter to test',
   'b': 'additional letter to test'
}

mainMenu_2 = {
   'one': 'README',
   'two': 'New Set',
   'three': 'View Sets',
   'four': 'Quiz',
   'five': 'Scores',
   'six': 'Configuration Settings',
   'Q': 'Quit',
   'd': 'another letter to test'
}

print mainMenu_1.keys()
[0, 1, 2, 3, 4, 5, 'a', …
Run Code Online (Sandbox Code Playgroud)

python dictionary

1
推荐指数
1
解决办法
841
查看次数

sorted()命令在某些条件下不稳定.这是故意的吗?

sorted() 文件(强调我的):

内置的sorted()函数保证稳定.如果保证不改变 比较相等的元素的相对顺序,则排序是稳定的[...]

在下面的代码中,键816具有相同的值,即它们将通过以下方式进行比较key=lambda x: d[x]:

d = {8: 0, 16: 0, 'a': 1}    

for i in range(200):    
    print(sorted(d, key=lambda x: d[x]))

# Prints always the same 
# [8, 16, 'a']
# [8, 16, 'a']
# [8, 16, 'a']
# ......
Run Code Online (Sandbox Code Playgroud)

现在让我们尝试对字典进行一些小修改:

例1:

for i in range(10):

    if i == 5:

        del d[8]
        del d[16]

        d.update({16: 0})
        d.update({8: 0})

    print(sorted(d, key=lambda x: d[x]))

# Prints: 
# [8, 16, 'a'] …
Run Code Online (Sandbox Code Playgroud)

python sorting python-3.4

-2
推荐指数
1
解决办法
806
查看次数