Доступ к элементам из морозильника в питоне

У меня есть фрозенцет x = frozenset({"a":1,"b":2}), Я не могу найти способ получить доступ к предметам в диктанте. Есть ли способ разморозить морозильник? Ниже приведена ошибка, которую я получаю.

In [1]: x = frozenset({"a":1,"b":2})

In [2]: x
Out[2]: frozenset({'a', 'b'})

In [3]: x["a"]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-c47cedd3f38d> in <module>()
----> 1 x["a"]

TypeError: 'frozenset' object has no attribute '__getitem__'

Любая помощь с благодарностью.

2 ответа

Решение

frozenset Конструктор занимает многократное! Как уже упоминалось в комментариях, когда вы повторяете dict, вы только перебираете его ключи, поэтому значения теряются.

x = frozenset({"a": 1,"b": 2})
# frozenset(['a', 'b'])

Вы можете создать его из dictпредметы, хотя:

x = frozenset({"a": 1, "b": 2}.items())
# frozenset([('a', 1), ('b', 2)])

Теперь вы можете просто превратить его обратно в dict:

d = dict(x)
# {'a': 1, 'b': 2}

Другой способ доступа к элементам — доступ к ним через список, поэтому позвольте создать замороженный набор так, как его создал @user2390182:

      x = frozenset({"a": 1,"b": 2}.items())

Затем можно создать список:

      d = list(x)
# [('a',1),('b',2)]

С помощью преобразования списка можно также перебирать замороженные наборы из одного элемента, поэтому:

      x2 = frozenset({"a","b"})

Преобразование показано ниже:

      d2 = list(x2)
# ['a','b']

Но преобразовать замороженный набор одного элемента в dict не удается:

      d2 = dict(x2)
# ValueError: dictionary update sequence element #0 has length 1; 2 is required
Другие вопросы по тегам