#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. каков ваш ожидаемый результат?, единый набор всего?