Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过获取存储为字符串的键的整数值对字典列表进行排序_Python_Sorting_Dictionary - Fatal编程技术网

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