Reverse dictionary where values are listsConvert dictionary of lists of tuples to list of lists/tuples in pythonMulti-dictionary API using Python Flask-RESTfulUpdating a dict with dict valuesMatching two lists of dicts, strictly and more looselyCreate dictionary with default immutable keysDictionary of dictionary - Get 2nd keysList all possible permutations from a python dictionary of listsFlatten Dictionary Python challengeRemove the second number from every group of three numbersTransforming a dict of lists into a list of dicts

What does “the session was packed” mean in this context?

Expand and Contract

Unlock My Phone! February 2018

Size of subfigure fitting its content (tikzpicture)

How to prevent "they're falling in love" trope

Intersection Puzzle

Reverse dictionary where values are lists

What do you call someone who asks many questions?

Assassin's bullet with mercury

Can I run a new neutral wire to repair a broken circuit?

When is a connective truth functional?

Do scales need to be in alphabetical order?

Short story with a alien planet, government officials must wear exploding medallions

Could the museum Saturn V's be refitted for one more flight?

iPad being using in wall mount battery swollen

Should I tell management that I intend to leave due to bad software development practices?

Is it logically or scientifically possible to artificially send energy to the body?

Ambiguity in the definition of entropy

What exploit Are these user agents trying to use?

How writing a dominant 7 sus4 chord in RNA ( Vsus7 chord in the 1st inversion)

Plagiarism or not?

Can my sorcerer use a spellbook only to collect spells and scribe scrolls, not cast?

CAST throwing error when run in stored procedure but not when run as raw query

What method can I use to design a dungeon difficult enough that the PCs can't make it through without killing them?



Reverse dictionary where values are lists


Convert dictionary of lists of tuples to list of lists/tuples in pythonMulti-dictionary API using Python Flask-RESTfulUpdating a dict with dict valuesMatching two lists of dicts, strictly and more looselyCreate dictionary with default immutable keysDictionary of dictionary - Get 2nd keysList all possible permutations from a python dictionary of listsFlatten Dictionary Python challengeRemove the second number from every group of three numbersTransforming a dict of lists into a list of dicts













2












$begingroup$


I'm working on the following problem: I've got a dictionary like this one:



dic=0:[0,1,2],1:[3,4,5]


And I want to reverse it so it looks like this:



dic2=0:0,1:0,2:0,3:1,4:1,5:1


I managed to make it, but doing this:



dic2=
for i in dic:
for j in dic[i]:
dic2[j]=i


I know about list and dict comprehensions and this code reeks of it, but I'm not good at them when there are nested for and dicts. How would you make it more efficiently?










share|improve this question









New contributor




Juan C is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$
















    2












    $begingroup$


    I'm working on the following problem: I've got a dictionary like this one:



    dic=0:[0,1,2],1:[3,4,5]


    And I want to reverse it so it looks like this:



    dic2=0:0,1:0,2:0,3:1,4:1,5:1


    I managed to make it, but doing this:



    dic2=
    for i in dic:
    for j in dic[i]:
    dic2[j]=i


    I know about list and dict comprehensions and this code reeks of it, but I'm not good at them when there are nested for and dicts. How would you make it more efficiently?










    share|improve this question









    New contributor




    Juan C is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.







    $endgroup$














      2












      2








      2





      $begingroup$


      I'm working on the following problem: I've got a dictionary like this one:



      dic=0:[0,1,2],1:[3,4,5]


      And I want to reverse it so it looks like this:



      dic2=0:0,1:0,2:0,3:1,4:1,5:1


      I managed to make it, but doing this:



      dic2=
      for i in dic:
      for j in dic[i]:
      dic2[j]=i


      I know about list and dict comprehensions and this code reeks of it, but I'm not good at them when there are nested for and dicts. How would you make it more efficiently?










      share|improve this question









      New contributor




      Juan C is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.







      $endgroup$




      I'm working on the following problem: I've got a dictionary like this one:



      dic=0:[0,1,2],1:[3,4,5]


      And I want to reverse it so it looks like this:



      dic2=0:0,1:0,2:0,3:1,4:1,5:1


      I managed to make it, but doing this:



      dic2=
      for i in dic:
      for j in dic[i]:
      dic2[j]=i


      I know about list and dict comprehensions and this code reeks of it, but I'm not good at them when there are nested for and dicts. How would you make it more efficiently?







      python dictionary






      share|improve this question









      New contributor




      Juan C is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question









      New contributor




      Juan C is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question








      edited 5 hours ago









      Sᴀᴍ Onᴇᴌᴀ

      10.1k62167




      10.1k62167






      New contributor




      Juan C is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 5 hours ago









      Juan CJuan C

      1185




      1185




      New contributor




      Juan C is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Juan C is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Juan C is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




















          1 Answer
          1






          active

          oldest

          votes


















          3












          $begingroup$

          There's really not much to say about this code, it is straightforward.



          Style



          These are only nitpicks.



          • Generic dictionary keys are typically named k instead of i or j, but in a specific application a more descriptive name would be even better.

          • Collections should be named by their purpose in the application, not their type.

          • By convention, assignments and other binary operators should be surrounded by spaces: a = b, not a=b. See PEP 8 for reference, if you're not already aware of it. Following this style guide makes your code easier to read for others.

          Code improvements



          When iterating over the keys and values of a dictionary at the same time, you can use



          for k, v in dic.items():
          # ... use k, v ...


          instead of



          for k in dic:
          v = dic[k]
          # ...


          The nested loop can be transformed to a dictionary comprehension like this:



          dic2 = v: k for k, values in dic.items() for v in values


          You can remember that the order of for clauses in the comprehension is the same as the order of corresponding nested for loops.



          Potential pitfalls



          You should be aware that this transformation from a dictionary of lists to a reverse dictionary only works if all items in the original lists are unique. Counterexample:



          >>> dic = 0: [1, 2], 1: [2, 3]
          >>> v: k for k, values in dic.items() for v in values
          1: 0, 2: 1, 3: 1 # missing 2: 0


          To correct this, the output dictionary should have the same format as the input, namely mapping each of the items in the input lists to a list of corresponding keys.



          If the input represents a directed graph (mapping nodes to lists of neighbours), this corresponds to computing the transposed or reversed graph. It can be done by using a collections.defaultdict. I don't see an easy way to write it as a comprehension in this case.



          from collections import defaultdict

          graph = 0: [1, 2], 1: [2, 3]

          transposed_graph = defaultdict(list)
          for node, neighbours in graph.items():
          for neighbour in neighbours:
          transposed_graph[neighbour].append(node)

          # 1: [0], 2: [0, 1], 3: [1]





          share|improve this answer









          $endgroup$













            Your Answer





            StackExchange.ifUsing("editor", function ()
            return StackExchange.using("mathjaxEditing", function ()
            StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
            StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
            );
            );
            , "mathjax-editing");

            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "196"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );






            Juan C is a new contributor. Be nice, and check out our Code of Conduct.









            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216814%2freverse-dictionary-where-values-are-lists%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            3












            $begingroup$

            There's really not much to say about this code, it is straightforward.



            Style



            These are only nitpicks.



            • Generic dictionary keys are typically named k instead of i or j, but in a specific application a more descriptive name would be even better.

            • Collections should be named by their purpose in the application, not their type.

            • By convention, assignments and other binary operators should be surrounded by spaces: a = b, not a=b. See PEP 8 for reference, if you're not already aware of it. Following this style guide makes your code easier to read for others.

            Code improvements



            When iterating over the keys and values of a dictionary at the same time, you can use



            for k, v in dic.items():
            # ... use k, v ...


            instead of



            for k in dic:
            v = dic[k]
            # ...


            The nested loop can be transformed to a dictionary comprehension like this:



            dic2 = v: k for k, values in dic.items() for v in values


            You can remember that the order of for clauses in the comprehension is the same as the order of corresponding nested for loops.



            Potential pitfalls



            You should be aware that this transformation from a dictionary of lists to a reverse dictionary only works if all items in the original lists are unique. Counterexample:



            >>> dic = 0: [1, 2], 1: [2, 3]
            >>> v: k for k, values in dic.items() for v in values
            1: 0, 2: 1, 3: 1 # missing 2: 0


            To correct this, the output dictionary should have the same format as the input, namely mapping each of the items in the input lists to a list of corresponding keys.



            If the input represents a directed graph (mapping nodes to lists of neighbours), this corresponds to computing the transposed or reversed graph. It can be done by using a collections.defaultdict. I don't see an easy way to write it as a comprehension in this case.



            from collections import defaultdict

            graph = 0: [1, 2], 1: [2, 3]

            transposed_graph = defaultdict(list)
            for node, neighbours in graph.items():
            for neighbour in neighbours:
            transposed_graph[neighbour].append(node)

            # 1: [0], 2: [0, 1], 3: [1]





            share|improve this answer









            $endgroup$

















              3












              $begingroup$

              There's really not much to say about this code, it is straightforward.



              Style



              These are only nitpicks.



              • Generic dictionary keys are typically named k instead of i or j, but in a specific application a more descriptive name would be even better.

              • Collections should be named by their purpose in the application, not their type.

              • By convention, assignments and other binary operators should be surrounded by spaces: a = b, not a=b. See PEP 8 for reference, if you're not already aware of it. Following this style guide makes your code easier to read for others.

              Code improvements



              When iterating over the keys and values of a dictionary at the same time, you can use



              for k, v in dic.items():
              # ... use k, v ...


              instead of



              for k in dic:
              v = dic[k]
              # ...


              The nested loop can be transformed to a dictionary comprehension like this:



              dic2 = v: k for k, values in dic.items() for v in values


              You can remember that the order of for clauses in the comprehension is the same as the order of corresponding nested for loops.



              Potential pitfalls



              You should be aware that this transformation from a dictionary of lists to a reverse dictionary only works if all items in the original lists are unique. Counterexample:



              >>> dic = 0: [1, 2], 1: [2, 3]
              >>> v: k for k, values in dic.items() for v in values
              1: 0, 2: 1, 3: 1 # missing 2: 0


              To correct this, the output dictionary should have the same format as the input, namely mapping each of the items in the input lists to a list of corresponding keys.



              If the input represents a directed graph (mapping nodes to lists of neighbours), this corresponds to computing the transposed or reversed graph. It can be done by using a collections.defaultdict. I don't see an easy way to write it as a comprehension in this case.



              from collections import defaultdict

              graph = 0: [1, 2], 1: [2, 3]

              transposed_graph = defaultdict(list)
              for node, neighbours in graph.items():
              for neighbour in neighbours:
              transposed_graph[neighbour].append(node)

              # 1: [0], 2: [0, 1], 3: [1]





              share|improve this answer









              $endgroup$















                3












                3








                3





                $begingroup$

                There's really not much to say about this code, it is straightforward.



                Style



                These are only nitpicks.



                • Generic dictionary keys are typically named k instead of i or j, but in a specific application a more descriptive name would be even better.

                • Collections should be named by their purpose in the application, not their type.

                • By convention, assignments and other binary operators should be surrounded by spaces: a = b, not a=b. See PEP 8 for reference, if you're not already aware of it. Following this style guide makes your code easier to read for others.

                Code improvements



                When iterating over the keys and values of a dictionary at the same time, you can use



                for k, v in dic.items():
                # ... use k, v ...


                instead of



                for k in dic:
                v = dic[k]
                # ...


                The nested loop can be transformed to a dictionary comprehension like this:



                dic2 = v: k for k, values in dic.items() for v in values


                You can remember that the order of for clauses in the comprehension is the same as the order of corresponding nested for loops.



                Potential pitfalls



                You should be aware that this transformation from a dictionary of lists to a reverse dictionary only works if all items in the original lists are unique. Counterexample:



                >>> dic = 0: [1, 2], 1: [2, 3]
                >>> v: k for k, values in dic.items() for v in values
                1: 0, 2: 1, 3: 1 # missing 2: 0


                To correct this, the output dictionary should have the same format as the input, namely mapping each of the items in the input lists to a list of corresponding keys.



                If the input represents a directed graph (mapping nodes to lists of neighbours), this corresponds to computing the transposed or reversed graph. It can be done by using a collections.defaultdict. I don't see an easy way to write it as a comprehension in this case.



                from collections import defaultdict

                graph = 0: [1, 2], 1: [2, 3]

                transposed_graph = defaultdict(list)
                for node, neighbours in graph.items():
                for neighbour in neighbours:
                transposed_graph[neighbour].append(node)

                # 1: [0], 2: [0, 1], 3: [1]





                share|improve this answer









                $endgroup$



                There's really not much to say about this code, it is straightforward.



                Style



                These are only nitpicks.



                • Generic dictionary keys are typically named k instead of i or j, but in a specific application a more descriptive name would be even better.

                • Collections should be named by their purpose in the application, not their type.

                • By convention, assignments and other binary operators should be surrounded by spaces: a = b, not a=b. See PEP 8 for reference, if you're not already aware of it. Following this style guide makes your code easier to read for others.

                Code improvements



                When iterating over the keys and values of a dictionary at the same time, you can use



                for k, v in dic.items():
                # ... use k, v ...


                instead of



                for k in dic:
                v = dic[k]
                # ...


                The nested loop can be transformed to a dictionary comprehension like this:



                dic2 = v: k for k, values in dic.items() for v in values


                You can remember that the order of for clauses in the comprehension is the same as the order of corresponding nested for loops.



                Potential pitfalls



                You should be aware that this transformation from a dictionary of lists to a reverse dictionary only works if all items in the original lists are unique. Counterexample:



                >>> dic = 0: [1, 2], 1: [2, 3]
                >>> v: k for k, values in dic.items() for v in values
                1: 0, 2: 1, 3: 1 # missing 2: 0


                To correct this, the output dictionary should have the same format as the input, namely mapping each of the items in the input lists to a list of corresponding keys.



                If the input represents a directed graph (mapping nodes to lists of neighbours), this corresponds to computing the transposed or reversed graph. It can be done by using a collections.defaultdict. I don't see an easy way to write it as a comprehension in this case.



                from collections import defaultdict

                graph = 0: [1, 2], 1: [2, 3]

                transposed_graph = defaultdict(list)
                for node, neighbours in graph.items():
                for neighbour in neighbours:
                transposed_graph[neighbour].append(node)

                # 1: [0], 2: [0, 1], 3: [1]






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 5 hours ago









                mkrieger1mkrieger1

                1,4131824




                1,4131824




















                    Juan C is a new contributor. Be nice, and check out our Code of Conduct.









                    draft saved

                    draft discarded


















                    Juan C is a new contributor. Be nice, and check out our Code of Conduct.












                    Juan C is a new contributor. Be nice, and check out our Code of Conduct.











                    Juan C is a new contributor. Be nice, and check out our Code of Conduct.














                    Thanks for contributing an answer to Code Review Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    Use MathJax to format equations. MathJax reference.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216814%2freverse-dictionary-where-values-are-lists%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Oświęcim Innehåll Historia | Källor | Externa länkar | Navigeringsmeny50°2′18″N 19°13′17″Ö / 50.03833°N 19.22139°Ö / 50.03833; 19.2213950°2′18″N 19°13′17″Ö / 50.03833°N 19.22139°Ö / 50.03833; 19.221393089658Nordisk familjebok, AuschwitzInsidan tro och existensJewish Community i OświęcimAuschwitz Jewish Center: MuseumAuschwitz Jewish Center

                    Valle di Casies Indice Geografia fisica | Origini del nome | Storia | Società | Amministrazione | Sport | Note | Bibliografia | Voci correlate | Altri progetti | Collegamenti esterni | Menu di navigazione46°46′N 12°11′E / 46.766667°N 12.183333°E46.766667; 12.183333 (Valle di Casies)46°46′N 12°11′E / 46.766667°N 12.183333°E46.766667; 12.183333 (Valle di Casies)Sito istituzionaleAstat Censimento della popolazione 2011 - Determinazione della consistenza dei tre gruppi linguistici della Provincia Autonoma di Bolzano-Alto Adige - giugno 2012Numeri e fattiValle di CasiesDato IstatTabella dei gradi/giorno dei Comuni italiani raggruppati per Regione e Provincia26 agosto 1993, n. 412Heraldry of the World: GsiesStatistiche I.StatValCasies.comWikimedia CommonsWikimedia CommonsValle di CasiesSito ufficialeValle di CasiesMM14870458910042978-6

                    Typsetting diagram chases (with TikZ?) Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)How to define the default vertical distance between nodes?Draw edge on arcNumerical conditional within tikz keys?TikZ: Drawing an arc from an intersection to an intersectionDrawing rectilinear curves in Tikz, aka an Etch-a-Sketch drawingLine up nested tikz enviroments or how to get rid of themHow to place nodes in an absolute coordinate system in tikzCommutative diagram with curve connecting between nodesTikz with standalone: pinning tikz coordinates to page cmDrawing a Decision Diagram with Tikz and layout manager