Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 22, 2012 14:48:02

armor
Зарегистрирован: 2012-06-19
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

dict с нужной последовательностью ключей

Добрый день,
я так понял что dict хранится по-своему, и из-за этого сбивается порядок. Как можно обойти это?
Что бы при переборе выводилось в том же порядке, как и записано в переменной? sort не подходит…

Офлайн

#2 Окт. 22, 2012 14:56:18

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

dict с нужной последовательностью ключей

В модуле collections есть класс OrderedDict, но не используйте его без нужды, он работает медленнее обычного dict()



Офлайн

#3 Окт. 22, 2012 15:07:14

armor
Зарегистрирован: 2012-06-19
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

dict с нужной последовательностью ключей

Как раз нужда есть, сильно медленнее? Таких переменных у меня штук 15 в каждом по 5-30 значений, я думаю это не те объемы, чтобы тормозить.

Офлайн

#4 Окт. 22, 2012 15:13:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

dict с нужной последовательностью ключей

armor
сильно медленнее
Спидометр Вам в руки



Офлайн

#5 Окт. 22, 2012 15:16:07

armor
Зарегистрирован: 2012-06-19
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

dict с нужной последовательностью ключей

Разницы не заметил. Спасибо за помощь.

Офлайн

#6 Окт. 22, 2012 15:28:03

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

dict с нужной последовательностью ключей

# -*- coding: utf-8 -*-
import timeit
from collections import OrderedDict
s=range(1000)
d=dict(enumerate(s))
d1=OrderedDict(enumerate(s))
def f1():
    d.update(enumerate(s, 2000))
def f2():
    d1.update(enumerate(s, 2000))
print timeit.timeit('f1()', number=10000, setup="from __main__ import d,s, f1")
print timeit.timeit('f2()', number=10000, setup="from __main__ import d1,s, f2")
>>>0.797545909882
>>>6.81275892258



Офлайн

#7 Окт. 22, 2012 15:41:14

armor
Зарегистрирован: 2012-06-19
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

dict с нужной последовательностью ключей

Плохо конечно, но у меня они используются как константы и все работа с ними сводится к перебору и обращению по ключу.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version