Странное поведение при использовании bool в качестве ключа dict в python [duplicate]

Вы можете использовать словари, чтобы выполнить это. Словари - это хранилища ключей и ценностей.

>>> 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.

-1
задан arthurckl 4 June 2015 в 16:46
поделиться

2 ответа

Вместо того, чтобы иметь несколько ключей с тем же именем, вы могли бы уйти от нескольких значений для каждой клавиши?

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]))
0
ответ дан stevieb 21 August 2018 в 11:17
поделиться

То, что вы пытаетесь сделать, невозможно со словарями. Фактически, это противоречит всей идее за словарями.

Кроме того, ваш класс Sets вам не поможет, так как он дает каждому имени новый (произвольный) хэш-код, что затрудняет извлечение элементов из словаря, кроме проверки все предметы, которые побеждают цель dict. Вы не можете сделать dict.get(Sets(some_name)), так как это создаст новый объект new Sets, имеющий другой хэш-код, чем тот, который уже есть в словаре!

Вместо этого вы можете:

  1. Просто создать список пар (name, value) или
    pairs = zip(names, values) # or list(zip(...)) in Python 3
    
  2. создать имена сопоставления словаря для списков значений ,
    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
2
ответ дан tobias_k 21 August 2018 в 11:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: