Найти - Пользователи
Полная версия: Сортировка словаря
Начало » Python для новичков » Сортировка словаря
1 2 3
reclosedev
Я понял так
def strange_sort(items):
    unique = sorted(set(items))
    return [unique[i % len(unique)] for i in range(len(items))]
 
items = [1, 2, 2, 2, 2, 1, 1, 1, 3, 3, 3, 3]
print strange_sort(items)  # [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
reclosedev
Если количество может быть разным:
from collections import Counter
 
def strange_sort(items):
    count = Counter(items)
    unique = sorted(count.keys())
    result = []
    while count:
        for item in unique:
            count[item] -= 1
            if count[item] < 0:
                del count[item]
            else:
                result.append(item)
    return result
 
items = [1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 3, 3, 3, 3]
print strange_sort(items)  # [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 1, 1]
Возможно, есть способ проще.
Saturn
reclosedev
Спасибо большое, а то я уже столько вариантов пробовал но никак не получалось.
Это то что, надо включая второй результат поскольку есть вероятность разного количества.
py.user.next
>>> date = ['aaa', 'ddd', 'ddd', 'ddd', 'ddd', 'aaa', 'aaa', 'aaa', 'ccc', 'ccc', 'ccc', 'ccc']
>>> 
>>> def f(lst):
...     out = []
...     uni = set()
...     for i in lst:
...         if i not in uni:
...             uni.add(i)
...             out.append(i)
...     return len(lst) // len(out) * out
... 
>>> print(f(date))
['aaa', 'ddd', 'ccc', 'aaa', 'ddd', 'ccc', 'aaa', 'ddd', 'ccc', 'aaa', 'ddd', 'ccc']
>>>
это вот без sorted(), как в первом сообщении, с учётом поправки про количество
lorien
>>> from itertools import chain, izip_longest, groupby
>>> date = ['aaa', 'ddd', 'aaa', 'aaa', 'aaa', 'ccc', 'ccc']
>>> filter(None, chain.from_iterable(izip_longest(*(list(x[1]) for x in groupby(sorted(date))))))
['aaa', 'ccc', 'ddd', 'aaa', 'ccc', 'aaa', 'aaa'
py.user.next
ему надо a d c, а не a c d (это в первом сообщении)
lorien
Ну тогда мой вариант ошибочен.
reclosedev
Так и не понял какой результат нужен. Думаю, у py.user.next правильнее.

Для чего это используется?
Saturn
Спасибо большое всем за помощь, самый нужный вариант написал lorien
Для чего это используется?

Попробую описать суть…
В таблице есть поле site. Есть 3 вида (url) сайтов.
0.5 млн строк в таблице.
Вот для того чтобы вытащить из таблицы 30 строк мне нужно сделать 3 отдельных запроса.
К примеру:
SELECT * FROM table WHERE site='example1.com LIMIT 0,10';
SELECT * FROM table WHERE site='example2.com LIMIT 0,10';
SELECT * FROM table WHERE site='example3.com LIMIT 0,10';
Если учесть что данные в таблице находятся не по порядку по отношению к site.
В результате данные с запросов нужно отфильтровать чтобы получилось по порядку.

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB