Как использовать ключ и индекс для одного и того же значения словаря? - PullRequest
10 голосов
/ 29 мая 2011

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

Мое воображение предлагает что-то вроде этого:

ACTIONS = {
    (0, "ALIVE") : (1, 4, False),
    (2, "DEAD") : (2, 1, True)
}

>ACTIONS[0]
(1, 4, False)
>ACTIONS["DEAD"]
(2, 1, True)

Ответы [ 4 ]

7 голосов
/ 29 мая 2011

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

>> actions = {"alive": (1, 4, False), "dead": (2, 1, True)}
>> indexed_actions = {0: actions["alive"], 2: actions["dead"]}
>> actions["alive"]
(1, 4, False)
>> indexed_actions[0]
(1, 4, False)
6 голосов
/ 29 мая 2011

Использование коллекций Python 2.7.OrderedDict

In [23]: d = collections.OrderedDict([
   ....:   ("ALIVE", (1, 4, False)),
   ....:   ("DEAD", (2, 1, True)),
   ....: ])

In [25]: d["ALIVE"]
Out[25]: (1, 4, False)

In [26]: d.values()[0]
Out[26]: (1, 4, False)

In [27]: d.values()[1]
Out[27]: (2, 1, True)
1 голос
/ 29 мая 2011

Именные кортежи хороши:

>>> import collections
>>> MyTuple = collections.namedtuple('MyTuple', ('x','y','z'))
>>> t = MyTuple(1,2,3)
>>> t
MyTuple(x=1, y=2, z=3)
>>> t[0]
1
>>> t.x
1
>>> t.y
2
1 голос
/ 29 мая 2011

Если вы хотите назвать свои ключи для удобства чтения кода, вы можете сделать следующее:

ONE, TWO, THREE  = 1, 2, 3

ACTIONS = {
    ONE : value1,
    TWO : value2
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...