2013-03-07 3 views
2

Я хочу использовать словарь Python для отслеживания некоторых запущенных задач. Каждая из этих задач имеет ряд атрибутов, которые делают ее уникальной, поэтому я хотел бы использовать функцию этих атрибутов для генерации ключей словаря, чтобы снова найти их в словаре, используя те же атрибуты; что-то вроде следующего:Python, создающий словарь-словарь из списка элементов

class Task(object): 
    def __init__(self, a, b): 
     pass 

#Init task dictionary 
d = {} 

#Define some attributes 
attrib_a = 1 
attrib_b = 10 

#Create a task with these attributes 
t = Task(attrib_a, attrib_b) 

#Store the task in the dictionary, using a function of the attributes as a key 
d[[attrib_a, attrib_b]] = t 

Очевидно, что это не работает (список изменчива, и поэтому не может быть использован в качестве ключа («unhashable тип: список»)) - так что канонический способ генерации уникального ключа из нескольких известных атрибутов?

ответ

5

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

d[(attrib_a, attrib_b)] = t 

Скобки могут быть опущены:

d[attrib_a, attrib_b] = t 

Однако, некоторые люди, кажется, не нравится этот синтаксис.

1

Используйте кортеж

d[(attrib_a, attrib_b)] = t 

Это должно работать нормально

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