{"id":18357766,"url":"https://github.com/andreadcsousa/alura_conjuntos-dicionarios-collections_python","last_synced_at":"2025-08-05T02:06:16.756Z","repository":{"id":168043317,"uuid":"601223974","full_name":"andreadcsousa/alura_conjuntos-dicionarios-collections_python","owner":"andreadcsousa","description":"Este projeto faz parte do plano de estudos elaborado pela Alura para o programa de formação Desenvolve (3ª edição), trilha de dados, em parceria com a Boticário.","archived":false,"fork":false,"pushed_at":"2023-02-13T16:13:59.000Z","size":56,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-10T02:56:52.286Z","etag":null,"topics":["alura","aprendendo","boticario","dados","desenvolve-2023","desenvolve-3-edicao","python-collections"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andreadcsousa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-13T16:13:55.000Z","updated_at":"2023-02-13T16:16:26.000Z","dependencies_parsed_at":"2023-07-16T23:17:45.464Z","dependency_job_id":null,"html_url":"https://github.com/andreadcsousa/alura_conjuntos-dicionarios-collections_python","commit_stats":null,"previous_names":["andreadcsousa/alura_conjuntos-dicionarios-collections_python"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/andreadcsousa/alura_conjuntos-dicionarios-collections_python","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreadcsousa%2Falura_conjuntos-dicionarios-collections_python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreadcsousa%2Falura_conjuntos-dicionarios-collections_python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreadcsousa%2Falura_conjuntos-dicionarios-collections_python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreadcsousa%2Falura_conjuntos-dicionarios-collections_python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andreadcsousa","download_url":"https://codeload.github.com/andreadcsousa/alura_conjuntos-dicionarios-collections_python/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreadcsousa%2Falura_conjuntos-dicionarios-collections_python/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268820501,"owners_count":24312402,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-05T02:00:12.334Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alura","aprendendo","boticario","dados","desenvolve-2023","desenvolve-3-edicao","python-collections"],"created_at":"2024-11-05T22:15:22.603Z","updated_at":"2025-08-05T02:06:16.726Z","avatar_url":"https://github.com/andreadcsousa.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Python Collections parte 2: conjuntos e dicionários\n\nAprendendo a trabalhar com conjuntos, variações de dicionários e diversas coleções ao mesmo tempo.\n\n1. [Conjuntos](#1-conjuntos)\n2. [Operações](#2-operações)\n3. [Dicionários](#3-dicionários)\n4. [Variações de dicionários](#4-variações-de-dicionários)\n5. [Praticando](#5-praticando)\n\nSaiba mais sobre o curso [aqui](https://cursos.alura.com.br/course/python-collections-conjuntos-e-dicionarios) ou acompanhe minhas anotações abaixo. ⬇️\n\n## 1. Conjuntos\n\n### **Trabalhando com conjuntos, os sets**\n\nConjuntos podem ser feitos através de listas, porém as listas aceitam repetição de elementos. Então, ao unir duas listas, todos os valores erão agrupados, inclusive os já existentes.\n\n```py\n# criando um conjunto a partir de listas\nid_alunos_frontend = [12, 31, 47, 23]\nid_alunos_backend = [17, 31, 23, 59]\n\n# ao criar uma lista contendo uma cópia dos alunos front e acrescentando os alunos de back...\nid_alunos_fullstack = id_alunos_frontend.copy()\nid_alunos_fullstack.extend(id_alunos_backend)\nid_alunos_fullstack\n\n# ...o resultado é a união das listas, porém ocorre repetição dos alunos que estão em ambas as turmas\n[12, 31, 47, 23, 17, 31, 23, 59]\n```\n\n- `.copy()` método que cria a cópia de uma lista já existente e retorna uma nova lista\n- `.extend()` método que adiciona todos os elementos de um iterável ao final da lista\n\nSe a ideia é filtrar itens iguais, pode-se utilizar o `set` que é uma coleção de dados únicos. Set utiliza chaves `{}` para referenciar conjuntos. Por padrão, um conjunto não possui ordem nos elementos.\n\n```py\n# utilizando chaves, cria-se um conjunto não ordenado com os itens da lista uma única vez\nid_alunos_frontend = {12, 31, 47, 23}\nid_alunos_backend = {17, 31, 23, 59}\n\n# o set une esses conjuntos e faz a interseção dos elementos iguais\nfor aluno in set(id_alunos_fullstack):\n    print(aluno)\n\n# o resultado ainda é a união das listas, mas é feita uma interseção dos elementos, sem repetição\n12, 31, 47, 23, 17, 59\n\n# é possível ainda fazer uma comparação com o operador \"ou\"\nusuarios_data_science | usuarios_machine_learning\n\n# isso retorna a união dos conjuntos de elementos\n{12, 17, 23, 31, 47, 59}\n```\n\n### **Mais operações de conjuntos**\n\n\u003e Usos comuns para conjuntos incluem a verificação eficiente da existência de objetos e a eliminação de itens duplicados. Conjuntos também suportam operações matemáticas como **união, interseção, diferença e diferença simétrica**.\n\n- Para criar um conjunto vazio precisa, necessariamente, usar a função `set()`.\n- Para criar um dicionário vazio ou uma estrutura de dados pode usar chaves `{}`.\n\n```py\n# realizando operações com conjuntos\nusuarios_data_science = {15, 23, 43, 56}\nusuarios_machine_learning = {13, 23, 56, 42}\n\nusuarios_data_science | usuarios_machine_learning   # \"| = ou\" equivale a união dos conjuntos\n{13, 15, 23, 42, 43, 56}\n\nusuarios_data_science \u0026 usuarios_machine_learning   # \"\u0026 = e\" equivale a interseção dos conjuntos\n{23, 56}\n\nusuarios_data_science - usuarios_machine_learning   # \"-\" remove números que se repetem no outro conjunto\n{15, 43}\n\nusuarios_data_science ^ usuarios_machine_learning   # \"^\" equivale ao \"ou\" só que remove os repetidos\n{13, 15, 42, 43}\n```\n\n## 2. Operações\n\n### **Outro tipo de conjunto e conjuntos de outros tipos**\n\nÉ possível modificar o conjunto em tempo real. Porém, ao invés de utilizar `.append()`, já que conjuntos não possuem índice e o append adiciona ao final da lista. No `set` utiliza-se o `.add()` para adicionar um elemento ao conjunto, sem se preocupar com a ordem dos elementos.\n\n- Lembrando que ao adicionar um elemento que já existe, a lista não será alterada.\n\nAssim como as listas e diferente das tuplas, os conjuntos são mutáveis. Podendo **adicionar, remover, alterar e limpar** um conjunto existente. Contudo, existe um tipo de conjunto que é imutável, o `frozenset()`, seu conteúdo não pode ser alterado depois da criação, podendo ser utilizado como chave de dicionário ou elemento de outro conjunto para comparações e operações.\n\n\u003e Então o frozenset() também faz parte do nosso dia a dia, quando queremos trabalhar com elementos e conjuntos, podemos acabar optando agora por listas, por tuplas, às vezes arrays ou arrays do numPy, que é mais comum, às vezes vamos utilizar um conjunto, às vezes um conjunto congelado imutável.\n\n```py\nusuarios = {1, 5, 76, 34, 52, 13, 17}\n\nusuarios.add(13)    # o 13 já está no conjunto\nusuarios.add(75)\n\nusuarios = frozenset(usuarios)  # conjunto fechado\n\nusuarios.add(36)    # o frozenset não deixa adicionar elementos\n```\n\nConjuntos podem ser utilizados com strings e com objetos também, não só com números inteiros. Utilizando a função `.split()` pode-se quebrar todo o texto em partes, gerando uma lista de palavras. É possível, inclusive, transformar esse texto em um conjunto. Nesse caso, palavras repetidas será removidas.\n\n```py\nmeu_texto = \"Bem vindo meu nome é Guilherme eu gosto muito de nomes e tenho o meu cachorro e gosto muito de cachorro\"\n\nmeu_texto.split()       # quebra o texto da lista em pedaços\nset(meu_texto.split())  # quebra o texto e transforma em conjunto, então não repete palavras\n```\n\n## 3. Dicionários\n\n### **Trabalhando com dicionários**\n\nDicionários são estruturas de dados usadas para armazenar dados em pares. Relacionados por `chave : valor`. É uma coleção ordenada, mutável e não permite duplicidade dos dados.\n\n```py\n# criando o dicionário\ncar = {\n  \"brand\": \"Porsche\",\n  \"model\": \"Carrera 911\",\n  \"year\": 1964\n}\n\n# identificando o conjunto como \"dict\"\ntype(car)\n\n# identificando o valor \"Porsche\" através da chave\ncar[\"brand\"]\n\n# adiciona um elemento ao dicionário\ncar[\"color\"] = blue\n```\n\n### **Mais operações com dicionários**\n\n\u003e Diferente de sequências que são indexadas por inteiros, dicionários são indexados por chaves (keys), que podem ser de qualquer tipo imutável (como strings e inteiros).\n\n- `dict` cria um dicionário\n- `get` verifica os elementos\n- `del` remove um elemento\n- `in` busca as chaves, não os valores\n- `keys` retorna as chaves\n- `values` retorna os valores\n- `items` percorre linha a linha\n\n```py\n# criando um dicionário pelo método \"dict()\"\ncar = dict(brand = \"Porsche\", model = \"Carrera 911\", year = 1964)\n\n# buscando o valor \"Carrera 911\" pela sua chave e retorna 0 se não achar\ncar.get(\"model\", 0)\n\n# removendo um valor do dicionário\ndel car[\"color\"]\n\n# retorna \"True\" se existir a chave específicada\n\"year\" in car\n\n# retorna \"False\" porque não busca valores\n1964 in car\n\n# retorna um valor como \"True\"\n1964 in car.values()\n```\n\n## 4. Variações de dicionários\n\n### **Default dict**\n\n\u003e O `defaultdict` é uma subclasse da classe de dicionário que retorna um objeto semelhante a um dicionário. Diferente do dicionário comum, o defaultdict nunca gera um \"KeyError\". Ele fornece um valor padrão para a chave que não existe.\n\n```py\n# importa o dicionário\nfrom collections import defaultdict\n\n# função que define um valor inexistente\ndef def_value():\n  return \"Not Present\"\n\n# criando o dicionário\nd = defaultdict(def_value)\nd[\"a\"] = 1\nd[\"b\"] = 2\n\nprint(d[\"a\"]) # retorna 1\nprint(d[\"b\"]) # retorna 2\nprint(d[\"c\"]) # retorna \"Not present\"\n```\n\nAlgumas funções utilizadas em dicionários, formatam `strings` para um controle melhor do código:\n\n- `lower()` devolve todos os caracteres em minúsculo\n- `upper()` devolve todos os caracteres em maiúsculo\n- `split()` quebra todo o texto em palavras\n- `replace()` devolve uma cópia modificada do texto\n- `join` função de concatenação de strings\n- `reverse` função que inverte a direção da string\n\n```py\n# lower to upper\nstring=\"python at guru99\"\nprint(string.upper())\n\n# upper to lower\nstring=\"PYTHON AT GURU99\"\nprint(string.lower())\n\n# split\nword=\"guru99 career guru99\"\t\t\nprint(word.split(' '))\n\n# replace\noldstring = 'I like Guru99' \nnewstring = oldstring.replace('like', 'love')\nprint(newstring)\n\n# join\nprint(\":\".join(\"Python\"))\n\n# reverse\nstring=\"12345\"\t\t\nprint(''.join(reversed(string)))\n```\n\nStrings são imutáveis, então para verificar os itens que foram modificados pelo `replace`, deve-se criar uma nova lista a partir da original e imprimir a nova lista. No exemplo acima, a \"oldstring\" ainda contém o \"like\".\n\n### **Counter**\n\nO `defaultdict()` funciona também como um contador, mas existe uma função específica para isso, o `Counter()`.\nO counter é uma subclasse do dicionário que serve para contar objetos. Sendo que os elementos desse objeto são armazenados como chaves e suas contagens armazenadas como valores.\n\n```py\n# texto de exemplo, formatado em minúsculo\nmeu_texto = \"Bem vindo meu nome é Guilherme eu gosto muito de nomes e tenho o meu cachorro e gosto muito de cachorro\"\nmeu_texto = meu_texto.lower()\n\n# utilizando o defaultdict para não retornar erro\n# utilizando o int para retornar zero como valor padrão\naparicoes = defaultdict(int)\n\n# fazendo um loop para contar as palavras do texto\nfor palavra in meu_texto.split():\n    aparicoes[palavra] += 1\naparicoes\n\n# utilizando o contador com o split tem-se o mesmo resultado\naparicoes = Counter(meu_texto.split())\naparicoes\n```\n\n## 5. Praticando\n\n### **Colocando tudo em prática**\n\nReforçando o aprendizado do módulo de dicionários e das coleções em Python. Adicionando, também, novas funções e operações possíveis de serem realizadas nos exercícios propostos.\n\n- `sum` soma os caracteres do texto\n\n```py\n# a partir de um texto qualquer em que se queira contar letras em minúsculo\naparicoes = Counter(texto1.lower())\n\n# é possível somar os valores da quantidade de caracteres que aparecem no texto\ntotal_de_caracteres = sum(aparicoes.values())\n\n# e calcular a frequência com que esses caracteres aparecem e suas proporções\nproporcoes = [(letra, frequencia / total_de_caracteres) for letra, frequencia in aparicoes.items()]\n\n# criando um dicionário a partir disso e retornando nele os caracteres que mais aparecem\nproporcoes = Counter(dict(proporcoes))\nproporcoes.most_common(10)\n\n# por fim, cria uma função que engloba todas as modificações, operações e formatações realizados\ndef analisa_frequencia_letras(texto):\n    aparicoes = Counter(texto.lower())\n    total_de_caracteres = sum(aparicoes.values())\n    proporcoes = [(letra, frequencia / total_de_caracteres) for letra, frequencia in aparicoes.items()]\n    proporcoes = Counter(dict(proporcoes))\n    mais_comuns = proporcoes.most_common(10)\n    for caractere, proporcao in mais_comuns:\n        print(\"{} =\u003e {:.2f}%\".format(caractere, proporcao * 100))\n\n# para devolver as 10 letras que mais aparecem no texto e sua porcentagem de aparição\nanalisa_frequencia_letras(texto1)\n```\n\n\u003e Usando most_common passamos por parâmetro o número de elementos que queremos, no nosso caso foi 10. Ele vai nos retornar uma lista de tuplas com os elementos e suas devidas proporções.\n\n⬆️ [Voltar ao topo](#python-collections-parte-2-conjuntos-e-dicionários) ⬆️","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreadcsousa%2Falura_conjuntos-dicionarios-collections_python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreadcsousa%2Falura_conjuntos-dicionarios-collections_python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreadcsousa%2Falura_conjuntos-dicionarios-collections_python/lists"}