Вы можете использовать словари, чтобы выполнить это. Словари - это хранилища ключей и ценностей.
>>> dct = {'x': 1, 'y': 2, 'z': 3}
>>> dct
{'y': 2, 'x': 1, 'z': 3}
>>> dct["y"]
2
Вы можете использовать имена переменных ключей для достижения влияния переменных переменных без риска для безопасности.
>>> x = "spam"
>>> z = {x: "eggs"}
>>> z["spam"]
'eggs'
В тех случаях, когда вы думаете сделать что-то вроде [ ! d2] var1 = 'foo'
var2 = 'bar'
var3 = 'baz'
...
список может быть более уместным, чем dict. Список представляет упорядоченную последовательность объектов с целыми индексами:
l = ['foo', 'bar', 'baz']
print(l[1]) # prints bar, because indices start at 0
l.append('potatoes') # l is now ['foo', 'bar', 'baz', 'potatoes']
Для упорядоченных последовательностей списки удобнее, чем dict с целыми ключами, потому что списки поддерживают итерацию в порядке индекса, нарезки, append , и другие операции, которые потребуют неудобного управления ключами с помощью dict.
Вместо того, чтобы иметь несколько ключей с тем же именем, вы могли бы уйти от нескольких значений для каждой клавиши?
names = [1]
values = [[1, 2, 3], [4, 5, 6]]
dict = {}
for i in names:
dict[i] = values
for k,v in dict.items():
for v in dict[k]:
print("key: {} :: v: {}".format(k, v))
Выход:
key: 1 :: v: [1, 2, 3]
key: 1 :: v: [4, 5, 6]
Тогда вы доступ к каждому значению, подобному этому (или в цикле):
print("Key 1 value 1: {}".format(dict[1][0]))
print("Key 1 value 2: {}".format(dict[1][1]))
То, что вы пытаетесь сделать, невозможно со словарями. Фактически, это противоречит всей идее за словарями.
Кроме того, ваш класс Sets
вам не поможет, так как он дает каждому имени новый (произвольный) хэш-код, что затрудняет извлечение элементов из словаря, кроме проверки все предметы, которые побеждают цель dict. Вы не можете сделать dict.get(Sets(some_name))
, так как это создаст новый объект new Sets
, имеющий другой хэш-код, чем тот, который уже есть в словаре!
Вместо этого вы можете:
(name, value)
или pairs = zip(names, values) # or list(zip(...)) in Python 3
dictionary = {}
for n, v in zip(names, values):
dictionary.setdefault(n, []).append(v)
Первый подход, используя списки кортежей, будет иметь линейное время поиска (в основном вы должны проверить все записи), а второй - отображение битов в списки, так же близко, как вы можете добраться до «multi-key-dicts» и должны хорошо служить вашим целям. Чтобы получить доступ к значениям для каждой клавиши, сделайте следующее:
for key, values in dictionary.iteritems():
for value in values:
print key, value