如果值是列表,是否可以按值对python字典进行排序,我希望它按该列表的第一个值排序。 E.G:
data = {
"Joe" : [1, "Joe", "password", "Joe@Email.com"],
"Toby" : [2, "Toby", "password", "Toby@Email.com"],
"John" : [4, "John", "password", "John@Email.com"],
"Julie" : [3, "Julie", "password", "Julie@Email.com"]
}
我希望它是这样的:哪里'我'是关键
for i in range(len(data)):
print("UserID: ", str(data[i][0]), ". Username: ", data[i][1])
>> UserID: 1. Username: Joe
>> UserID: 2. Username: Toby
>> UserID: 3. Username: Julie
>> UserID: 4. Username: John
非常感谢。
答案 0 :(得分:6)
你不能对dict进行排序,因为Python dicts是无序的。您至少有两种选择:
您可以将sorted
与key=
参数一起使用。在这种情况下,它将是dict值的第一个元素:
sorted(data.items(), key= lambda x: x[1][0])
# [('Joe', [1, 'Joe', 'password', 'Joe@Email.com']), ('Toby', [2, 'Toby', 'password', 'Toby@Email.com']), ('Julie', [3, 'Julie', 'password', 'Julie@Email.com']), ('John', [4, 'John', 'password', 'John@Email.com'])]
它返回一个元组的排序列表,您可以使用它来迭代并打印结果:
data = {
"Joe": [1, "Joe", "password", "Joe@Email.com"],
"Toby": [2, "Toby", "password", "Toby@Email.com"],
"John": [4, "John", "password", "John@Email.com"],
"Julie": [3, "Julie", "password", "Julie@Email.com"]
}
for name, lst in sorted(data.items(), key=lambda x: x[1][0]):
print("UserID : %d. Username : %s" % (lst[0], name))
# UserID : 1. Username : Joe
# UserID : 2. Username : Toby
# UserID : 3. Username : Julie
# UserID : 4. Username : John
如果您想对data
进行排序并保留dict
的功能,可以创建OrderedDict
:
from collections import OrderedDict
data = {
"Joe": [1, "Joe", "password", "Joe@Email.com"],
"Toby": [2, "Toby", "password", "Toby@Email.com"],
"John": [4, "John", "password", "John@Email.com"],
"Julie": [3, "Julie", "password", "Julie@Email.com"]
}
data = OrderedDict(sorted(data.items(), key=lambda x: x[1][0]))
# OrderedDict([('Joe', [1, 'Joe', 'password', 'Joe@Email.com']), ('Toby', [2, 'Toby', 'password', 'Toby@Email.com']), ('Julie', [3, 'Julie', 'password', 'Julie@Email.com']), ('John', [4, 'John', 'password', 'John@Email.com'])])
注意:对于这两个示例,key=lambda x: x[1]
也足够了。
答案 1 :(得分:3)
您可以使用itemgetter,这应该按列表对条目进行排序(您可以对列表列表进行排序,默认情况下将按第一个元素排序)。这将返回一个元组列表,第一个元素是键,您可以循环并打印。
import operator
data = {
"Joe" : [1, "Joe", "password", "Joe@Email.com"],
"Toby" : [2, "Toby", "password", "Toby@Email.com"],
"John" : [4, "John", "password", "John@Email.com"],
"Julie" : [3, "Julie", "password", "Julie@Email.com"]
}
sorted_data = sorted(data.items(), key=operator.itemgetter(1))
for entry in (sorted_data):
print("UserID: " + str(entry[1][0]) + ". Username: " + entry[0])
输出:
UserID: 1. Username: Joe
UserID: 2. Username: Toby
UserID: 3. Username: Julie
UserID: 4. Username: John
注意:sorted_data是元组列表而不是字典的原因是python词典本质上是无序的。请参阅此答案以获得解释:Why is python ordering my dictionary like so?