通过取存储为字符串的键的整数值对字典列表进行排序

2024-06-28 22:06:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典列表,其中的值存储为字符串。我想通过将值作为整数而不是字符串来对它们进行排序。 我有密码

 XWordDict=[{"name":"ABC","pos":"1"},{"name":"GHI","pos":"10"},{"name":"DEF","pos":"2"}]
Xlistsorted=sorted(XWordDict,key=(operator.itemgetter("pos")))

命令如下

^{pr2}$

不管我想怎样

 [{'name': 'ABC', 'pos': '1'}, {'name': 'DEF', 'pos': '2'}, {'name': 'GHI', 'pos': '10'}]

如果我换成

Xlistsorted=sorted(XWordDict,key=int(operator.itemgetter("pos)))

它给出了一个错误

TypeError: int() argument must be a string or a number, not 'operator.itemgetter'

Tags: key字符串namepos列表字典defoperator
2条回答

key参数必须是函数。operator.itemgetter(i)返回一个函数,但是为了在上面添加额外的处理,必须使用lambda。因为itemgetter返回一个函数,所以可以调用结果在字典中使用它(在lambda中作为x传递:

listsorted = sorted(XWordDict, key=lambda x: int(operator.itemgetter("pos")(x)))
listsorted
Out[16]: 
[{'name': 'ABC', 'pos': '1'},
 {'name': 'DEF', 'pos': '2'},
 {'name': 'GHI', 'pos': '10'}]

也就是说,itemgetter在这里可能是一个过于复杂的解决方案,您只需:

^{pr2}$

一元关键字()返回一元关键字“排序后的参数”。因此,您需要一个函数来转换列表的每个元素(我们称之为d的字典),访问要排序的值,并将其从字符串转换为整数。在

def dict_to_int(d):
    string_value = d['pos']
    int_value = int(string_value)
    return int_value

您可以将其传递给sorted(),如下所示:

^{pr2}$

此函数是一个冗长的示例,可以大幅缩短并转换为相当简洁的lambda:

lambda d: int(d['pos'])

因此使用:

sorted_list = sorted(list_of_dicts, key=lambda d: int(d['pos']))

相关问题 更多 >