【问题标题】:Dictionary sorting with string index and values python使用字符串索引和值 python 进行字典排序
【发布时间】:2016-11-08 20:57:26
【问题描述】:

我想按调用索引后的第一个值(在本例中为:公司名称)对我的字典进行排序。我的结构如下:

它存储在 JSON 文件中:

{

"0": ["Microsoft", "IT", "Software", "USA", "12000"],
"1": ["Intel", "IT", "Hardware", "BELGIUM", "14500"],
"2": ["Cisco", "IT", "Hardware", "GERMANY", "45120"],
"3": ["HP", "IT", "Hardware", "GERMANY", "545612"],
"4": ["Apple", "IT", "Hardware", "GERMANY", "454555"]  

}

print(mydict[str(id)[0]) 显示公司名称

每行数据类型如下:

公司名称->业务->活动->国家->员工数量 员工

如果我尝试使用 sorted(mydict) 对我的字典进行排序,它不起作用,我还尝试使用 zip 对其进行排序,但它也失败了。

这是我第一次使用 dictornaries,我还在学习 python,所以我真的需要帮助

我想使用这个排序的字典来填充我用 Mako-Template Engine 生成的表。它已经适用于未排序的字典:)

【问题讨论】:

    标签: python python-3.x sorting dictionary


    【解决方案1】:

    字典和哈希表是无序的,但是如果您想保持数据的顺序,可以使用 OrderedDict

    可以根据您的数据创建 OrderedDict

    from collections import OrderedDict
    d = {
    
    "0": ["Microsoft", "IT", "Software", "USA", "12000"],
    "1": ["Intel", "IT", "Hardware", "BELGIUM", "14500"],
    "2": ["Cisco", "IT", "Hardware", "GERMANY", "45120"],
    "3": ["HP", "IT", "Hardware", "GERMANY", "545612"],
    "4": ["Apple", "IT", "Hardware", "GERMANY", "454555"]  
    
    }
    
    d = OrderedDict(sorted(d.items(), key=lambda x : x[1][0][0]))
    #  x[1] is the value, x[1][0] is the list, x[1][0][0] is the company name
    print(d)
    
    OrderedDict([('4', ['Apple', 'IT', 'Hardware', 'GERMANY', '454555']), ('2', ['Cisco', 'IT', 'Hardware', 'GERMANY', '45120']), ('3', ['HP', 'IT', 'Hardware', 'GERMANY', '545612']), ('1', ['Intel', 'IT', 'Hardware', 'BELGIUM', '14500']), ('0', ['Microsoft', 'IT', 'Software', 'USA', '12000'])])
    

    【讨论】:

      【解决方案2】:

      您不能对字典进行“排序”。如果您想对字典进行排序,则字典没有所需的顺序。

      因为你只是想写出来,你可以让 keys 按照字典中名字的顺序排序。然后,根据sorted返回的键的顺序写出字典内容。

      所以,可以按名称排序:

      # sorted(d, key=d.get) returns [4, 2, 3, 1, 0]
      for i in sorted(d, key=d.get):  
          print(d[i])  # or, write it out
      

      按顺序打印内容:

      ['Apple', 'IT', 'Hardware', 'GERMANY', '454555']
      ['Cisco', 'IT', 'Hardware', 'GERMANY', '45120']
      ['HP', 'IT', 'Hardware', 'GERMANY', '545612']
      ['Intel', 'IT', 'Hardware', 'BELGIUM', '14500']
      ['Microsoft', 'IT', 'Software', 'USA', '12000']
      

      你也可以写出来。

      【讨论】:

        【解决方案3】:

        我设法实现了我自己的版本来对字典进行排序,而没有使用排序,我只是将公司名称变成了 Key 并使用它来对我的字典进行排序,并且它起作用了!

        data_companies = {}
        
            for key_s in data_opl:
                new_key =  data_opl[key_s][0]
                data_companies[new_key] = data_opl[key_s]
        

        之后我只是用它来打印它们:

        for id_s in sorted(data_companies.keys()):
            print(data_companies[id_s][0])
            print(data_companies[id_s][1])
            print(data_companies[id_s][2])
            print(data_companies[id_s][3])
            print(data_companies[id_s][4])
        

        我非常感谢并重视您帮助我的努力

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-09
          • 2020-11-10
          • 2016-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多