2010-08-12 3 views
0
r_dict={'answer1': "value1",'answer11': "value11",'answer2': "value2",'answer3': "value3",'answer4': "value4",} 

    for i in r_dict: 
     if("answer" in i.lower()): 
      print i 

    Result is answer11,answer2,snswer4,answer3 

Я использую Python 2.4.3. У меня есть способ получить заказ, в котором он заполнен?Заказ в Python (2.4) словарь

Или есть способ сделать это с помощью регулярного выражения, так как я использую более старую версию Python?

+0

Что такое '' ответ ## "'? – katrielalex

+0

См. Редактирование. – Hulk

+0

Возможно, отредактируйте заголовок вопроса, чтобы указать, что вы находитесь на python 2.4.x, или чтобы указать, что коллекции.OrderedDict не является вариантом. – whaley

ответ

2

Словари неупорядоченны - то есть, у них есть какой-то порядок, но это повлияло на неочевидными способами по порядку введения и хэш-ключей. Однако есть еще одна реализация, которая запоминает порядок вставки, collections.OrderedDict.

Редактировать: Для Python 2.4 существует несколько сторонних реализаций. Я их не использовал, но с the one from voidspace выглядит многообещающим.

+0

он на python 2.4.3. OrderedDict является новым по состоянию на 2.7. – whaley

+0

Да, уже видел это и добавил 2.4 решение. – delnan

+0

+1 для реализации voidspace. Раньше я этого не знал. – whaley

1

Не только используя словарь самостоятельно. Словари в Python (и хорошая часть эквивалентных неспециализированных структур данных, которые включают отображение) не сортируются.

Вы можете потенциально подкласса dict и переопределить методы __setitem__ и __delitem__ для добавления/удаления каждой клавиши во внутренний список, где вы сохраняете свою собственную сортировку. Возможно, вам придется переопределить другие методы, такие как __iter__, чтобы получить сортировку, которую вы хотите, из цикла for.

... или просто использовать odict module как @delnan suggested

0

Короткий ответ: нет. Словари Python в основном неупорядочены.

1

Словарь по строительству неупорядочен. Если вы хотите упорядоченный один, использовать collections.OrderedDict:

import collections 
r_dict = collections.OrderedDict([ ('answer1', "value1"), ('answer11', "value11"), ('answer2', "value2"), ('answer3', "value3"), ('answer4', "value4") ]) 

for i in r_dict: 
    if("answer" in i.lower()): 
     print i 
+0

Я использую python 2.4.3 Я думаю, что это может быть невозможно – Hulk

+0

'collections' был представлен в Python 2.4, я считаю. Ты это пробовал? – katrielalex

+0

Ах, извинения. 'collections' действительно был введен в Python 2.4, но' OrderedDict' не был добавлен до 2.7. Если вам нужна эта функциональность, возможно, проще всего составить список кортежей [(ключ, значение)] и самостоятельно обработать уникальность. – katrielalex

Смежные вопросы