python - 对字典进行排序-声明 python 的顺序

标签 python dictionary

<分区>

我在这里添加了生成 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:"

我用过字典。我无法对我的字典进行正确的排序。我希望字典按照我声明的顺序进行排序和打印。 另一个问题是,如果在第 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' ,
                                                 'size_val'     : 'toolarge'},

                             'md5Tag'           :{'md5_tag_name'    : 'md5' ,
                                                  'md5_val'         : md5} ,

                             'sdListTag'        :{'sdList_tag_name': 'sdlist' , 
                                                  'sdList_val'     : sdList} }

            count = 0
            tag_len = len(tags)

            while count < tag_len :

                inner = tags[tags.keys()[count]]

                tag_name = inner[inner.keys()[0]]
                tag_val = inner[inner.keys()[1]]

                full_tag = generate_tag(tag_name,tag_val)

                print full_tag
                count = count + 1



  def myordered_dict(): 

      from collections import OrderedDict


      tags =         {'A_repOperationTag'  :{'tag_name':'repOperation' ,
                                      'tag_val'     : repOperation },

                'B_modeTag'             :{'tag_name':'mode' ,
                                        'tag_val'     : 'replication' },


                'C_imagesTag'        :{'tag_name': 'images',
                                      'tag_val'     : images  },

                'D_statusTag'        :{'tag_name':'status' ,
                                      'tag_val'     : status},

                'E_sizeTag'          :{'tag_name':'size' ,
                                     'tag_val'     : 'toolarge'},

                'F_md5Tag'           :{'tag_name'    : 'md5' ,
                                      'tag_val'         : md5} ,

                'G_sdListTag'        :{'tag_name': 'sdlist' , 
                                      'tag_val'     : sdList},

                'H_machinename'        :{'tag_name': 'hostname' , 
                                      'tag_val'     : 'xp_vm'} }

      tags = OrderedDict(sorted(tags.items(), key=lambda t: t[0]))

最佳答案

dict 对象没有排序 -- 更准确地说,dict 对象的顺序是实现、版本和插入顺序 相关的。这并不是说您插入 key 的顺序就是您取出 key 的顺序。这仅意味着如果您将相同的键插入两个不同的字典,但顺序不同,则不能保证将它们取回的顺序相同。例如:

>>> print {1:1, 9:2}
{1: 1, 9: 2}
>>> print {9:1, 1:2}
{9: 1, 1: 2}

但这并不意味着键会保持其插入顺序。请注意,如果我在末尾将键 2 插入到字典中会发生什么:

>>> print {9:1, 1:2, 2:4}
{9: 1, 2: 4, 1: 2}
>>> print {1:1, 9:2, 2:4}
{1: 1, 2: 4, 9: 2}

这是另一个 answer如果您感兴趣的话,我前一段时间讨论了 (C)python 如何确定字典的顺序。

如果你需要一个字典来维持秩序,你应该使用 collections.OrderedDict .

关于python - 对字典进行排序-声明 python 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15360912/

相关文章:

python - 如何在 python 中返回多维字典的关联键和值?

python - 按值对 python 集列表进行排序

python - pd.DataFrame.set_index 可以维护数据类型吗?

swift - 在字典数组中找到最大值

java - 数据结构与算法实现-字典

java - 将 JSON 字符串映射到 HashMap

python - Chef 安装 uwsgi libiconv.so.2 没有那个文件或目录

python - 没有页面在 scrapy 中被抓取

python - 使用 xpath 循环特定 div 内的所有 <h2> 标签

python - 我们可以使用 for 循环来迭代字典的字典吗?