сортировка в питоне - PullRequest
       20

сортировка в питоне

2 голосов
/ 03 июня 2010

У меня есть хэш-карта, например, так:

results[tweet_id] = {"score" : float(dot(query,doc) / (norm(query) * norm(doc))), "tweet" : tweet}

То, что я хотел бы сделать, это отсортировать результаты по встроенной клавише «Score». Я не знаю, насколько это возможно, я видел много учебников по сортировке, но они были для простых (не вложенных) структур данных.

Ответы [ 4 ]

4 голосов
/ 03 июня 2010
>>> results=[{"s":1,"score":100},{"s":2,"score":101},{"s":3,"score":99},{"s":4,"score":1},{"s":5,"score":1000}]

>>> from operator import itemgetter

>>> sorted(results, key=itemgetter("score"))
[{'s': 4, 'score': 1}, {'s': 3, 'score': 99}, {'s': 1, 'score': 100}, {'s': 2, 'score': 101}, {'s': 5, 'score': 1000}]
3 голосов
/ 03 июня 2010

Вы можете отсортировать его с помощью пользовательской функции сравнения, например:

results.sort(key=lambda x:x['score'])
2 голосов
/ 03 июня 2010

Вы можете использовать sorted с operator.itemgetter , чтобы использовать значение "Score" в качестве ключа:

sorted_results = sorted(results,key=operator.itemgetter("score"))
1 голос
/ 03 июня 2010

Предполагая, что ваш results является dict (потому что вы назвали его хэш-картой, а я предполагаю, что tweet_id является ключом словаря, а не счетчиком), вам нужно преобразовать его в список сначала для того, чтобы иметь возможность отсортировать его. В Python 3:

results = {}
results["1234"] = {"score": 123, "tweet": "Hello"}
results["4321"] = {"score": 321, "tweet": "there"}
results["abcd"] = {"score": 111, "tweet": "sailor!"}
l=[]
for key, value in results.items():    # use .iteritems() in Python 2.x
    l.append([key, value])

for item in sorted(l, key=lambda x: x[1]["score"]):
    print(item)

выдаст

['abcd', {'tweet': 'sailor!', 'score': 111}]
['1234', {'tweet': 'Hello', 'score': 123}]
['4321', {'tweet': 'there', 'score': 321}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...