当键是字符串(名称)时,按字母顺序对字典进行排序

JSc*_*rtz 5 python sorting dictionary

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

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

dictUsers[Name] = namedTuple(age, address, email, etc...)
Run Code Online (Sandbox Code Playgroud)

作为一个例子,我的字典看起来像

[John]="29, 121 bla, some@la.com"
[Jack]="32, 122 ble, some@la.com"
[Rudy]="42, 123 blj, some@la.com"
Run Code Online (Sandbox Code Playgroud)

现在打印我做以下(响应是字典):

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

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

我得到了一切 - 但它没有排序 - 在开始手动排序之前我想也许有一种内置的方法来做...

谢谢,

小智 37

我会这样做:

sorted_dict = {key: value for key, value in sorted(unsorted_dict.items())}
Run Code Online (Sandbox Code Playgroud)

  • 为了使其更简单:`sorted_dict = dict(sorted(unsorted_dict.items()))`。 (33认同)

sun*_*raj 8

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

sortednames=sorted(dictUsers.keys(), key=lambda x:x.lower())
Run Code Online (Sandbox Code Playgroud)

对于每个键名,从dict中检索值

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

  • 无需说`.keys()`。我相信,首选方法是 `key=string.lower`,而不是使用 lambda 创建一个新函数: `>>> a = {'a': 1, 'B': 2} >>> print Sorted(a ) ['B', 'a'] >>> 导入字符串 >>> 打印排序(a, key=string.lower) ['a', 'B']` (2认同)

小智 7

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))
Run Code Online (Sandbox Code Playgroud)

输出

 alpha:1
 beta:2
 delta:4
 Epsilon:5
 Gamma:3
Run Code Online (Sandbox Code Playgroud)