【问题标题】:Sort dictionary alphabetically when the key is a string (name)当键是字符串(名称)时按字母顺序对字典进行排序
【发布时间】:2014-09-03 22:06:06
【问题描述】:

首先,我知道有很多关于字典排序的帖子,但我找不到一个完全适合我的情况的帖子——而且我只是不理解 sorted(...lambda) 的东西——所以就这样吧。

使用 Python 3.x 我有一个这样的字典:

dictUsers[Name] = namedTuple(age, address, email, etc...)

举个例子,我的字典是这样的

[John]="29, 121 bla, some@la.com"
[Jack]="32, 122 ble, some@la.com"
[Rudy]="42, 123 blj, some@la.com"

现在为了打印,我执行以下操作(其中响应是字典):

for keys, values in response.items():
    print("Name= " + keys)
    print ("   Age= " + values.age)
    print ("   Address= " + values.address)
    print ("   Phone Number= " + values.phone)

当用户要求打印出用户数据库时,我希望它根据用作 KEY 的“名称”按字母顺序打印。

我得到了一切工作 - 但它没有排序 - 在开始手动排序之前,我想也许有一种内置的方法可以做到这一点......

谢谢,

【问题讨论】:

  • 为什么接受降低键的答案?你没有指定你想要那个。
  • 这是最佳答案:sorted_dict = {key: value for key, value in sorted(unsorted_dict.items())}
  • @Charlie Parker lower() 用于键的排序,在 sorted() 中 key= 参数用于指定要查找和比较的内容(在本例中为小写键),不是在返回值中使用什么,所以没关系,排序后的 dict 将具有相同的键

标签: python sorting dictionary


【解决方案1】:

按字母顺序对字典键进行排序的简单算法,首先使用sorted对键进行排序

sortednames=sorted(dictUsers.keys(), key=lambda x:x.lower())

为每个键名检索字典中的值

for i in sortednames:
   values=dictUsers[i]
   print("Name= " + i)
   print ("   Age= " + values.age)
   print ("   Address= " + values.address)
   print ("   Phone Number= " + values.phone)

【讨论】:

  • 这是调试器为创建的“sortednames”变量显示的内容:list: ['Ahmad', 'John', 'Katya', 'a']。显然'a'应该是第一个而不是最后一个...
  • 而且...我添加了逗号 - 现在我得到 TypeError: 'str' 对象的描述符 'lower' 需要一个参数
  • @JSchwartz 请立即尝试
  • 不用说.keys()。我相信首选的方法是key=string.lower,而不是用lambda创建一个新函数:>>> a = {'a': 1, 'B': 2} >>> print sorted(a) ['B', 'a'] >>> import string >>> print sorted(a, key=string.lower) ['a', 'B']
  • 你为什么要调低按键?用户没有指定它想要那个。
【解决方案2】:

只是在单独的答案中重申@hughdbrown 的评论,因为我一开始错过了它并相信它是这个问题的真实答案:

你有一本字典要按字母顺序排序,比如dictio

dictio = {'Beta': 2, 'alpha': 1}

sorted() 将按字母顺序为您将键排序到一个列表中,前提是您将所有键都转换为小写(否则大写条目将首先排序,然后是所有小写):

sortedkeys = sorted(dictio, key=str.lower)

通过使用该排序键列表再次调用原始字典,您可以按字母顺序输出:

for i in sortedkeys:
    print dictio[i]

【讨论】:

    【解决方案3】:
    dictio = { 'Epsilon':5, 'alpha':1, 'Gamma':3, 'beta':2, 'delta':4 }
    
    sortedDict = dict( sorted(dictio.items(), key=lambda x: x[0].lower()) )
    
    for k,v in sortedDict.items():
        print('{}:{}'.format(k,v))
    

    输出

     alpha:1
     beta:2
     delta:4
     Epsilon:5
     Gamma:3
    

    【讨论】:

    • 我不确定您能否保证 dict() 以正确的顺序返回键。它可以随机播放它们
    • 你为什么要调低琴键?用户没有指定它想要那个。
    【解决方案4】:
    def sort_dict_by_key(unsorted_dict)  
    
        sorted_keys = sorted(unsorted_dict.keys(), key=lambda x:x.lower())
    
        sorted_dict= {}
        for key in sorted_keys:
            sorted_dict.update({key: unsorted_dict[key]})
    
        return sorted_dict
    
    un_sorted_dict = {'Epsilon': 5, 'alpha': 1, 'Gamma': 3, 'beta': 2, 'delta': 4}
    sorted_dict = sort_dict_by_key(un_sorted_dict)
    print(sorted_dict) # {'alpha': 1, 'beta': 2, 'Epsilon': 5, 'Gamma': 3, 'delta': 4}
    

    【讨论】:

      【解决方案5】:

      我会这样做:

      sorted_dict = {key: value for key, value in sorted(unsorted_dict.items())}
      

      【讨论】:

      • 为了更简单:sorted_dict = dict(sorted(unsorted_dict.items())).
      【解决方案6】:

      您可以将OrderedDictsorted 一起使用:

      from collections import OrderedDict
      
      test_dict = {}
      
      ordered_dict = OrderedDict(sorted(test_dict.items(), key=lambda t: t[0]))
      

      【讨论】:

        【解决方案7】:
        dict1={"d":1,"a":3,"z":0}
        
        x=sorted(dict1.items())
        
        print(x)
        

        输出

        [('a', 3), ('d', 1), ('z', 0)]
        

        【讨论】:

        • 使用dictsorted 做了什么?
        猜你喜欢
        • 1970-01-01
        • 2020-01-22
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        • 2015-07-23
        • 2017-10-04
        • 2018-01-27
        相关资源
        最近更新 更多