Как проверить элемент списка внутри dict, используя jinja2?

С точки зрения сложности, я думаю, что ответ Рептилия не является оптимальным. Это время O (n ^ 2).

Вот решение, которое принимает время O (n log n).

def list_to_percentiles(numbers):
    pairs = zip(numbers, range(len(numbers)))
    pairs.sort(key=lambda p: p[0])
    result = [0 for i in range(len(numbers))]
    for rank in xrange(len(numbers)):
        original_index = pairs[rank][1]
        result[original_index] = rank * 100.0 / (len(numbers)-1)
    return result

Я не уверен, но я думаю это оптимальная временная сложность, которую вы можете получить. Грубая причина, по которой я думаю, что она оптимальна, состоит в том, что информация обо всех процентилях по существу эквивалентна информации отсортированного списка, и вы не можете добиться большего, чем O (n log n) для сортировки.

EDIT: В зависимости от вашего определения «процентиль» это может не всегда давать правильный результат. См. Ответ BrenBarn для более подробного объяснения и лучшего решения, которое использует scipy / numpy.

0
задан Alex Callaway 26 February 2019 в 18:21
поделиться

1 ответ

Вы довольно близко.

Попробуйте:

import jinja2

AliasDict = {'110.34.214.180': [['SR12'], 'Unavailable', '0'], 
        '110.34.214.110': [['SR9'], 'Unavailable', '0'], 
        '105.34.214.184': [['SR11'], 'Available', '0'], 
        '110.34.214.100': [['SR2'], 'Unavailable', '0'], 
        '110.34.214.124': [['SR7'], 'Unavailable', '0'], 
        '110.138.249.238': [['SR5'], 'Unavailable', '0']
       }

s = """{% for stations, value in AliasDict.items() %}
   {% if value[1] == 'Unavailable' %}
       <a href="#"> {{loop.index}}. {{stations}} : {{value[0]}}</a>
   {% endif %}
{% endfor %} """

template = jinja2.Environment().from_string(s)
data = template.render(AliasDict=AliasDict)
print(data)
0
ответ дан Rakesh 26 February 2019 в 18:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: