我需要一些python排序方面的帮助。 我有一个数据对象,在这个对象是列表,我喜欢为特定的列表项排序数据。目前我打印出来像这样:
[[{u'archived': False, u'name': u'someone', u'num_files': 0, u'managed_by': {u'username': u'somebody', u'role': u'somerole', u'email_address': u'me@somewhere', u'id': u'307', u'name': u'firstname lastname'}, u'updated_on': u'2015-06-18 17:55:39', u'id': 23},
{u'archived': False, u'name': u'someoneelse', u'num_files': 0, u'managed_by': {u'username': u'somebody else', u'role': u'somerole', u'email_address': u'you@somewhere', u'id': u'341', u'name': u'Firstname Lastname'}, u'updated_on': u'2015-06-09 17:38:52', u'id': 48}]]
所以我希望这些数据已经按'id'项排序。
这是数据对象的样子,如果我打印它:
{{1}}
从整体来看只有两个列表,但我喜欢排序最后一个id,在这个例子中是23和48
答案 0 :(得分:1)
试试这个:
import numpy as np
data_new = np.array(data).flatten()
sorted_list = sorted(data_new, key=lambda x: x['id'])
第一行将创建一个dict列表。第二个将按'id'键对它们进行排序。 之后,您可以按照自己的意愿打印出来:
for i in sorted_list:
print(i['id'])
修改强> 因为你的列表可能包含不同大小的子列表(如here),这将破坏ndarray.flatten或numpy.ravel,因为你的元素是字典np.fromiter也是行不通的。所以你应该改变第二行:
data_new = np.hstack(data)
答案 1 :(得分:1)
我犯了一个错误,我使用.append和我的列表添加更多条目,而不是我应该使用.extend 现在我的名单已不再那么深了,而且这一切都要容易得多:
sorted_list = sorted(data, key=lambda x: x['id'])
for item in sorted_list:
print str(item.get('id')) + " : " + item.get('name')
但是感谢numpy提示,我认为如果我真的会更深入地搜索对象子列表等,那将会有所帮助。