Итерация в словаре Python - PullRequest
4 голосов
/ 28 июля 2010

Я заполняю словарь Python, основываясь на нескольких условиях.

Мой вопрос:

можем ли мы получить словарь в том же порядке, в котором он заполнен?

          questions_dict={}  

              data = str(header_arr[opt]) + str(row)
              questions_dict.update({data : xl_data})
              valid_xl_format = 7
              if (type.lower() == "ma" or type.lower() == "mc"):
                      data = str(header_arr[opt]) + str(row)
                      questions_dict.update({data : xl_data})
                      valid_xl_format = 7

После заполнения, если я повторяю, он не в том порядке, в котором он заполнен

     for k in questions_dict:
          logging.debug("%s:%s" %(k,questions_dict[k]))

Ответы [ 3 ]

8 голосов
/ 28 июля 2010

Чтобы отслеживать порядок заполнения словаря, вам необходим тип, отличный от dict (обычно известный как «упорядоченный диктат»), например, от стороннего odict модуль или, если вы можете обновить до Python 2.7, collection.OrderedDict .

2 голосов
/ 28 июля 2010

Словари не упорядоченные сборники.Вы должны иметь некоторые другие данные, чтобы отслеживать порядок.

0 голосов
/ 28 июля 2010

причина, по которой словари эффективны, заключается в том, что ключи сопоставляются с объектами, называемыми хешами, а словари хранят ваши значения, связанные с хешами ключей. поэтому, когда вы перебираете свои записи, это связано с порядком хэшей, а не с оригинальными ключами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...