我有一个程序,它返回一组具有如下等级的域:
ranks = [
{'url': 'example.com', 'rank': '11,279'},
{'url': 'facebook.com', 'rank': '2'},
{'url': 'google.com', 'rank': '1'}
]
我正在尝试通过使用
sorted
升序对它们进行排序:results = sorted(ranks,key=itemgetter("rank"))
但是,由于“rank”的值是字符串,因此它按字母数字顺序而不是按升序对它们进行排序:
1. google.com: 1
2. example.com: 11,279
3. facebook.com: 2
我只需要将“排名”键的值转换为整数,以便它们正确排序。有任何想法吗?
最佳答案
你快到了。替换 ,
后,您需要将选取的值转换为整数,如下所示
results = sorted(ranks, key=lambda x: int(x["rank"].replace(",", "")))
例如,
>>> ranks = [
... {'url': 'example.com', 'rank': '11,279'},
... {'url': 'facebook.com', 'rank': '2'},
... {'url': 'google.com', 'rank': '1'}
... ]
>>> from pprint import pprint
>>> pprint(sorted(ranks, key=lambda x: int(x["rank"].replace(",", ""))))
[{'rank': '1', 'url': 'google.com'},
{'rank': '2', 'url': 'facebook.com'},
{'rank': '11,279', 'url': 'example.com'}]
注意: 我刚刚使用了
pprint
函数来漂亮地打印结果。这里,
x
将是当前对象,key
的值被确定。我们从中获取 rank
属性的值,将 ,
替换为空字符串,然后将其转换为 int
的数字。如果你不想替换
,
并正确处理它,那么你可以使用 locale
module's atoi
function ,像这样>>> import locale
>>> pprint(sorted(ranks, key=lambda x: int(locale.atoi(x["rank"]))))
[{'rank': '1', 'url': 'google.com'},
{'rank': '2', 'url': 'facebook.com'},
{'rank': '11,279', 'url': 'example.com'}]
关于python - 如何在 Python 中将字典值转换为 int?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31923552/