Python 通过获取存储为字符串的键的整数值对字典列表进行排序
我有一个字典列表,其中的值存储为字符串。我想通过将值作为整数而不是字符串来对它们进行排序。 我有密码Python 通过获取存储为字符串的键的整数值对字典列表进行排序,python,sorting,dictionary,Python,Sorting,Dictionary,我有一个字典列表,其中的值存储为字符串。我想通过将值作为整数而不是字符串来对它们进行排序。 我有密码 XWordDict=[{"name":"ABC","pos":"1"},{"name":"GHI","pos":"10"},{"name":"DEF","pos":"2"}] Xlistsorted=sorted(XWordDict,key=(operator.itemgetter("pos"))) 该命令如下所示: [{'name': 'ABC', 'pos': '1'}, {'name'
XWordDict=[{"name":"ABC","pos":"1"},{"name":"GHI","pos":"10"},{"name":"DEF","pos":"2"}]
Xlistsorted=sorted(XWordDict,key=(operator.itemgetter("pos")))
该命令如下所示:
[{'name': 'ABC', 'pos': '1'}, {'name': 'GHI', 'pos': '10'}, {'name': 'DEF', 'pos': '2'}]
不管我想怎样
[{'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'
键
参数必须是函数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
可能是一个过于复杂的解决方案,您只需执行以下操作:
listsorted = sorted(XWordDict, key=lambda x: int(x['pos']))
键
参数必须是一个函数。操作符.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
可能是一个过于复杂的解决方案,您只需执行以下操作:
listsorted = sorted(XWordDict, key=lambda x: int(x['pos']))
sorted()的“key”关键字的参数是一个一元函数,返回要排序的实际值。因此,需要一个函数来转换列表中的每个元素(我们称之为d的字典),访问要排序的值,并将其从字符串转换为整数
def dict_to_int(d):
string_value = d['pos']
int_value = int(string_value)
return int_value
您可以将其传递给sorted(),如下所示:
sorted_list = sorted(list_of_dicts, key=dict_to_int)
此函数是一个冗长的示例,可以显著缩短并转换为相当简洁的lambda:
lambda d: int(d['pos'])
因此使用:
sorted_list = sorted(list_of_dicts, key=lambda d: int(d['pos']))
sorted()的“key”关键字的参数是一个一元函数,返回要排序的实际值。因此,需要一个函数来转换列表中的每个元素(我们称之为d的字典),访问要排序的值,并将其从字符串转换为整数
def dict_to_int(d):
string_value = d['pos']
int_value = int(string_value)
return int_value
您可以将其传递给sorted(),如下所示:
sorted_list = sorted(list_of_dicts, key=dict_to_int)
此函数是一个冗长的示例,可以显著缩短并转换为相当简洁的lambda:
lambda d: int(d['pos'])
因此使用:
sorted_list = sorted(list_of_dicts, key=lambda d: int(d['pos']))
如果您想使用OrderedDict,您也不能有重复的键。如果示例字典不是有效的Python代码,请尝试将人们可以轻松复制粘贴到控制台的内容组合在一起(通过复制粘贴到控制台来测试)。如果您想使用OrderedDict,您也不能有重复的键。如果示例字典不是有效的Python代码,请尝试将人们可以轻松复制粘贴到控制台的内容放在一起(通过复制粘贴到控制台来测试)。
x.get('pos',0)如果字典中不存在'pos'
,则更好。x.get('pos',0)
如果词典中没有'pos'
就更好了。你对dict\u to\u int
的定义不正确:最后一行应该读return int\u value
。你对dict\u to\u int
的定义不正确:最后一行应该读return int\u value
。