Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 17, 2011 11:01:50

Rumato
От:
Зарегистрирован: 2010-10-03
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

Словарь с ключом - частью массива

здравствуйте, подскажите, пожалуйста, как сделать вот это:
есть массив

S = [12, 121, 234, 343, 343, 343]
нужно сделать словарь где:
Code[S[i:]] = 1 
Code[S[:i]] = 0
i = некая цифра - индекс.
Как я понял (возможно неправильно), что в словаре нужно чтобы ключи были строкового типа, сейчас тут срезы списка поэтому получается ошибка.

Заранее спасибо за помощь.



Офлайн

#2 Окт. 17, 2011 11:32:57

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Словарь с ключом - частью массива

Ключом словаря может быть только переменная неизменяемого типа (строка, число, кортеж) поэтому со списками ничего не получится, меняйте логику.



Офлайн

#3 Окт. 17, 2011 11:36:44

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Словарь с ключом - частью массива

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



Офлайн

#4 Окт. 17, 2011 13:27:56

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Словарь с ключом - частью массива

Или используйте tuple:

s = (12, 121, 234, 343, 343, 343)
code = {}
code[s[3:]] = 0
code[s[:3]] = 1



Офлайн

#5 Окт. 17, 2011 13:57:53

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Словарь с ключом - частью массива

С кортежем могут возникнуть трудности в будущем - он тоже должен будет содержать только неизменяемые типы. В большом проекте я бы такой подход не использовал - внезапно могут появится ошибки в уже отлаженном и много раз используемом коде.



Офлайн

#6 Окт. 17, 2011 14:03:50

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Словарь с ключом - частью массива

Yurietc
С кортежем могут возникнуть трудности в будущем - он тоже должен будет содержать только неизменяемые типы. В большом проекте я бы такой подход не использовал - внезапно могут появится ошибки в уже отлаженном и много раз используемом коде.
>>> class A():
... pass
...
>>> a = A()
>>> d = {}
>>> d[(1,'s',a)] = 5
>>> d
{(1, 's', <__main__.A instance at 0xb767cbec>): 5}
Вроде как что угодно можно завернуть в кротеж, какие ошибки?

Отредактировано (Окт. 17, 2011 14:07:44)

Офлайн

#7 Окт. 17, 2011 15:32:08

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Словарь с ключом - частью массива

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

>>> {(2,):1}
{(2,): 1}
>>> {([],):1}

Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
{([],):1}
TypeError: unhashable type: 'list'



Офлайн

#8 Окт. 20, 2011 07:30:25

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9965
Репутация: +  856  -
Профиль   Отправить e-mail  

Словарь с ключом - частью массива

o7412369815963
Вроде как что угодно можно завернуть в кротеж, какие ошибки?
>>> class A:
... pass
...
>>> o = A()
>>> hash(o)
-881544782
>>> hash(([], 1))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>>



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version