Понимание словаря с набором кортежей в качестве значения

#python #dictionary-comprehension

#python #понимание словаря

Вопрос:

У меня есть это

 dict_1 = {1:{("Apple",1),("Orange",1),("Banana",1),("Lemon",1)}}
 

И я хотел бы, чтобы это :

 {"Apple","Orange","Banana","Lemon"}
 

Каково было бы правильное понимание здесь.

Мои попытки не увенчались успехом из-за

Ошибка типа: не хэшируемый тип: ‘set’

означает, что я не могу распаковать набор.

Комментарии:

1. {x for x, y in dict_1[1]} ?

2. Спасибо и как работать с несколькими ключами в словаре

Ответ №1:

Если у вас есть только одно ключевое имя 1 в dict, вы можете просто использовать

 dict = {1:{("Apple",1),("Orange",1),("Banana",1),("Lemon",1)}}
{key for key, val in dict[1]} # used the 1 assuming its the only key
 

Вывод:

 {"Apple","Orange","Banana","Lemon"}
 

Редактировать:

Код с любым количеством переменных (ключей)

 dict = {1:{("Apple",1),("Orange",1),("Banana",1),("Lemon",1)},2:{("Apple",1),("Orange",1),("Banana",1),("Lemon",1)}}
resultArray = [{x for x, y in dict[eachkey]} for eachkey in {x for x, y in dict.items()} ]
print(resultArray)
 

Вывод:

 [{'Orange', 'Apple', 'Lemon', 'Banana'}, {'Orange', 'Apple', 'Lemon', 'Banana'}]
 

Редактировать 2:

Код :

 from itertools import chain
dict = {1:{("Apple",1),("Orange",1),("Banana",1),("Lemon",1)},2:{("Juice",1),("Cocktail",1),("Milk",1),("Soup",1)}}
resultArray = [{x for x, y in dict[eachkey]} for eachkey in {x for x, y in dict.items()} ]
print(set().union(*(resultArray)))
 

Вывод:

 {'Lemon', 'Soup', 'Milk', 'Cocktail', 'Banana', 'Apple', 'Orange', 'Juice'}
 

Комментарии:

1. Спасибо, и вы угадываете мой следующий вопрос, означает с большим количеством ключей с той же структурой. как работать с несколькими ключами?

2. Как бороться с dict_2 = {1:{(«Яблоко»,1),(«Апельсин»,1),(«Банан»,1),(«Лимон»,1)}, 2:{(» Сок», 1), («Коктейль»,1),(«Молоко»,1),(«Суп»,1)}, 3: набор (), 4:{(«Завтрак»,1),(«Обед»,1), («Ужин»,1)} }

3. @Easytoday проверьте редактирование, которое я внес в ответ на то, что вы спросили выше. Обязательно примите ответ, если он решен.

4. Еще раз спасибо, ваш результат — список set, есть ли способ просто получить set, а не list? Я пытаюсь заменить скобки на фигурные скобки в вашем понимании, и снова я получил ту же ошибку TypeError: unhashable type: ‘set’.

5. каков ваш ожидаемый результат?, единый набор всего?