matching key against different pairs in python





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







3















Due to different names of an attribute I need to match a key of a key value pare against a regex.



The possible names are defined in a dict:



MyAttr  = [
('ref_nr', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
('color', 'Color|color|tinta|farbe|Farbe'),
]


The import attributes from an item in another dict:



ImportAttr  = [
('Referenz', 'Ref-Val'),
('color', 'red'),
]


Now I would like to return the value of the import attributes, if it is a known attribute (defined in my first dict MyAttr) matching different spelling of the attribute in question.



for key, value in ImportAttr:
if key == "Referenz-Nr" : ref = value
if key == "Farbe" : color = value


The goal is to return the value of a possible attribute if it is a known one.



print(ref)
print(color)


Should return the value if "Referenz-Nr" and "Farbe" are known attributes.



Obviously this pseudo code does not work, I just can't get my head around a function implementing regex for a key search.










share|improve this question































    3















    Due to different names of an attribute I need to match a key of a key value pare against a regex.



    The possible names are defined in a dict:



    MyAttr  = [
    ('ref_nr', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
    ('color', 'Color|color|tinta|farbe|Farbe'),
    ]


    The import attributes from an item in another dict:



    ImportAttr  = [
    ('Referenz', 'Ref-Val'),
    ('color', 'red'),
    ]


    Now I would like to return the value of the import attributes, if it is a known attribute (defined in my first dict MyAttr) matching different spelling of the attribute in question.



    for key, value in ImportAttr:
    if key == "Referenz-Nr" : ref = value
    if key == "Farbe" : color = value


    The goal is to return the value of a possible attribute if it is a known one.



    print(ref)
    print(color)


    Should return the value if "Referenz-Nr" and "Farbe" are known attributes.



    Obviously this pseudo code does not work, I just can't get my head around a function implementing regex for a key search.










    share|improve this question



























      3












      3








      3


      1






      Due to different names of an attribute I need to match a key of a key value pare against a regex.



      The possible names are defined in a dict:



      MyAttr  = [
      ('ref_nr', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
      ('color', 'Color|color|tinta|farbe|Farbe'),
      ]


      The import attributes from an item in another dict:



      ImportAttr  = [
      ('Referenz', 'Ref-Val'),
      ('color', 'red'),
      ]


      Now I would like to return the value of the import attributes, if it is a known attribute (defined in my first dict MyAttr) matching different spelling of the attribute in question.



      for key, value in ImportAttr:
      if key == "Referenz-Nr" : ref = value
      if key == "Farbe" : color = value


      The goal is to return the value of a possible attribute if it is a known one.



      print(ref)
      print(color)


      Should return the value if "Referenz-Nr" and "Farbe" are known attributes.



      Obviously this pseudo code does not work, I just can't get my head around a function implementing regex for a key search.










      share|improve this question
















      Due to different names of an attribute I need to match a key of a key value pare against a regex.



      The possible names are defined in a dict:



      MyAttr  = [
      ('ref_nr', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
      ('color', 'Color|color|tinta|farbe|Farbe'),
      ]


      The import attributes from an item in another dict:



      ImportAttr  = [
      ('Referenz', 'Ref-Val'),
      ('color', 'red'),
      ]


      Now I would like to return the value of the import attributes, if it is a known attribute (defined in my first dict MyAttr) matching different spelling of the attribute in question.



      for key, value in ImportAttr:
      if key == "Referenz-Nr" : ref = value
      if key == "Farbe" : color = value


      The goal is to return the value of a possible attribute if it is a known one.



      print(ref)
      print(color)


      Should return the value if "Referenz-Nr" and "Farbe" are known attributes.



      Obviously this pseudo code does not work, I just can't get my head around a function implementing regex for a key search.







      python python-3.x






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 27 '18 at 16:45







      merlin

















      asked Nov 25 '18 at 8:52









      merlinmerlin

      84411122




      84411122
























          2 Answers
          2






          active

          oldest

          votes


















          1














          It was not clear for me but maybe you want it:



          #!/usr/bin/python3

          MyAttr = [
          ('ref_nr', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
          ('color', 'Color|color|tinta|farbe|Farbe')
          ]

          ImportAttr = [
          ('Referenz', 'Ref-Val'),
          ('color', 'red'),
          ]

          ref, color = None, None

          for key, value in ImportAttr:
          if key in MyAttr[0][1].split('|'):
          ref = value
          if key in MyAttr[1][1].split('|'):
          color = value

          print("ref: ", ref)
          print("color: ", color)


          The split can split the string into a list of string by the separator ("|" character here) then you can check is the key in that list or not.



          The following solution is a little bit tricky. If you don't want to hardcode the positions into your source you can use locals().



          #!/usr/bin/python3

          MyAttr = [
          ('ref', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
          ('color', 'Color|color|tinta|farbe|Farbe')
          ]

          ImportAttr = [
          ('Referenz', 'Ref-Val'),
          ('color', 'red'),
          ]

          ref, color = None, None

          for var, names in MyAttr:
          for key, value in ImportAttr:
          if key in names.split('|'):
          locals()[var] = value
          break

          print("ref: ", ref)
          print("color: ", color)





          share|improve this answer





















          • 1





            What are the "a" and "b" in the LOOKUPS? If you want to finde the keys whith them then better to use a dict instead of a list of tuples.

            – Miklos Horvath
            Nov 25 '18 at 9:35











          • Well said, Question is not clear though!

            – pygo
            Nov 25 '18 at 9:43











          • @MiklosHorvath "a" and "b" are not needed, was a try to solve it. The only thing that matters is the different sorts for Reference and Color. My goal is to match those and other variants in order to match "Reference" inside key and "color" inside key

            – merlin
            Nov 25 '18 at 13:05











          • @MiklosHorvath I edited the question to make it clearer

            – merlin
            Nov 27 '18 at 16:50











          • Ok, I see you have changed the positions in the myAttr (LOOKUPS). I need to edit my post because the readers downvoted it after your edit. They thought my answer is bad but not just your queston changed :D

            – Miklos Horvath
            Nov 27 '18 at 21:08



















          0














          If you want, you can also use pandas to solve this problem for the large data sets in this way.




          get_references_and_colors.py


          import pandas as pd
          import re
          import json

          def get_references_and_colors(lookups, attrs):
          responses =

          refs = pd.Series(re.split(r"|", lookups[0][0]))
          colors = pd.Series(re.split(r"|", lookups[1][0]))
          d = {"ref": refs, "color": colors}
          df = pd.DataFrame(d).fillna('') # To drop NaN entries, in case if refs
          # & colors are not of same length

          # ref color
          # 0 Reference Color
          # 1 Referenz color
          # 2 Referenz-Nr tinta
          # 3 Referenznummer farbe
          # 4 Farbe

          for key, value in attrs:
          response = {}
          response["for_attr"] = key

          df2 = df.loc[df["ref"] == key]; # find in 'ref' column

          if not df2.empty:
          response["ref"] = value
          else:
          df3 = df.loc[df["color"] == key]; # find in 'color' column
          if not df3.empty:
          response["color"] = value
          else:
          response["color"] = None # Not Available
          response["ref"] = None

          responses.append(response)

          return responses


          if __name__ == "__main__":

          LOOKUPS = [
          ('Reference|Referenz|Referenz-Nr|Referenznummer', 'a'),
          ('Color|color|tinta|farbe|Farbe', 'b'),
          ]

          ATTR = [
          ('Referenz', 'Ref-Val'),
          ('color', 'red'),
          ('color2', 'orange'), # improper
          ('tinta', 'Tinta-col')
          ]

          responses = get_references_and_colors(LOOKUPS, ATTR) # dictionary
          pretty_response = json.dumps(responses, indent=4) # for pretty printing
          print(pretty_response)



          Output


          [
          {
          "for_attr": "Referenz",
          "ref": "Ref-Val"
          },
          {
          "for_attr": "color",
          "color": "red"
          },
          {
          "for_attr": "color2",
          "color": null,
          "ref": null
          },
          {
          "for_attr": "tinta",
          "color": "Tinta-col"
          }
          ]





          share|improve this answer
























            Your Answer






            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: "1"
            };
            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: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            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
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53465977%2fmatching-key-against-different-pairs-in-python%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            It was not clear for me but maybe you want it:



            #!/usr/bin/python3

            MyAttr = [
            ('ref_nr', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
            ('color', 'Color|color|tinta|farbe|Farbe')
            ]

            ImportAttr = [
            ('Referenz', 'Ref-Val'),
            ('color', 'red'),
            ]

            ref, color = None, None

            for key, value in ImportAttr:
            if key in MyAttr[0][1].split('|'):
            ref = value
            if key in MyAttr[1][1].split('|'):
            color = value

            print("ref: ", ref)
            print("color: ", color)


            The split can split the string into a list of string by the separator ("|" character here) then you can check is the key in that list or not.



            The following solution is a little bit tricky. If you don't want to hardcode the positions into your source you can use locals().



            #!/usr/bin/python3

            MyAttr = [
            ('ref', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
            ('color', 'Color|color|tinta|farbe|Farbe')
            ]

            ImportAttr = [
            ('Referenz', 'Ref-Val'),
            ('color', 'red'),
            ]

            ref, color = None, None

            for var, names in MyAttr:
            for key, value in ImportAttr:
            if key in names.split('|'):
            locals()[var] = value
            break

            print("ref: ", ref)
            print("color: ", color)





            share|improve this answer





















            • 1





              What are the "a" and "b" in the LOOKUPS? If you want to finde the keys whith them then better to use a dict instead of a list of tuples.

              – Miklos Horvath
              Nov 25 '18 at 9:35











            • Well said, Question is not clear though!

              – pygo
              Nov 25 '18 at 9:43











            • @MiklosHorvath "a" and "b" are not needed, was a try to solve it. The only thing that matters is the different sorts for Reference and Color. My goal is to match those and other variants in order to match "Reference" inside key and "color" inside key

              – merlin
              Nov 25 '18 at 13:05











            • @MiklosHorvath I edited the question to make it clearer

              – merlin
              Nov 27 '18 at 16:50











            • Ok, I see you have changed the positions in the myAttr (LOOKUPS). I need to edit my post because the readers downvoted it after your edit. They thought my answer is bad but not just your queston changed :D

              – Miklos Horvath
              Nov 27 '18 at 21:08
















            1














            It was not clear for me but maybe you want it:



            #!/usr/bin/python3

            MyAttr = [
            ('ref_nr', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
            ('color', 'Color|color|tinta|farbe|Farbe')
            ]

            ImportAttr = [
            ('Referenz', 'Ref-Val'),
            ('color', 'red'),
            ]

            ref, color = None, None

            for key, value in ImportAttr:
            if key in MyAttr[0][1].split('|'):
            ref = value
            if key in MyAttr[1][1].split('|'):
            color = value

            print("ref: ", ref)
            print("color: ", color)


            The split can split the string into a list of string by the separator ("|" character here) then you can check is the key in that list or not.



            The following solution is a little bit tricky. If you don't want to hardcode the positions into your source you can use locals().



            #!/usr/bin/python3

            MyAttr = [
            ('ref', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
            ('color', 'Color|color|tinta|farbe|Farbe')
            ]

            ImportAttr = [
            ('Referenz', 'Ref-Val'),
            ('color', 'red'),
            ]

            ref, color = None, None

            for var, names in MyAttr:
            for key, value in ImportAttr:
            if key in names.split('|'):
            locals()[var] = value
            break

            print("ref: ", ref)
            print("color: ", color)





            share|improve this answer





















            • 1





              What are the "a" and "b" in the LOOKUPS? If you want to finde the keys whith them then better to use a dict instead of a list of tuples.

              – Miklos Horvath
              Nov 25 '18 at 9:35











            • Well said, Question is not clear though!

              – pygo
              Nov 25 '18 at 9:43











            • @MiklosHorvath "a" and "b" are not needed, was a try to solve it. The only thing that matters is the different sorts for Reference and Color. My goal is to match those and other variants in order to match "Reference" inside key and "color" inside key

              – merlin
              Nov 25 '18 at 13:05











            • @MiklosHorvath I edited the question to make it clearer

              – merlin
              Nov 27 '18 at 16:50











            • Ok, I see you have changed the positions in the myAttr (LOOKUPS). I need to edit my post because the readers downvoted it after your edit. They thought my answer is bad but not just your queston changed :D

              – Miklos Horvath
              Nov 27 '18 at 21:08














            1












            1








            1







            It was not clear for me but maybe you want it:



            #!/usr/bin/python3

            MyAttr = [
            ('ref_nr', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
            ('color', 'Color|color|tinta|farbe|Farbe')
            ]

            ImportAttr = [
            ('Referenz', 'Ref-Val'),
            ('color', 'red'),
            ]

            ref, color = None, None

            for key, value in ImportAttr:
            if key in MyAttr[0][1].split('|'):
            ref = value
            if key in MyAttr[1][1].split('|'):
            color = value

            print("ref: ", ref)
            print("color: ", color)


            The split can split the string into a list of string by the separator ("|" character here) then you can check is the key in that list or not.



            The following solution is a little bit tricky. If you don't want to hardcode the positions into your source you can use locals().



            #!/usr/bin/python3

            MyAttr = [
            ('ref', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
            ('color', 'Color|color|tinta|farbe|Farbe')
            ]

            ImportAttr = [
            ('Referenz', 'Ref-Val'),
            ('color', 'red'),
            ]

            ref, color = None, None

            for var, names in MyAttr:
            for key, value in ImportAttr:
            if key in names.split('|'):
            locals()[var] = value
            break

            print("ref: ", ref)
            print("color: ", color)





            share|improve this answer















            It was not clear for me but maybe you want it:



            #!/usr/bin/python3

            MyAttr = [
            ('ref_nr', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
            ('color', 'Color|color|tinta|farbe|Farbe')
            ]

            ImportAttr = [
            ('Referenz', 'Ref-Val'),
            ('color', 'red'),
            ]

            ref, color = None, None

            for key, value in ImportAttr:
            if key in MyAttr[0][1].split('|'):
            ref = value
            if key in MyAttr[1][1].split('|'):
            color = value

            print("ref: ", ref)
            print("color: ", color)


            The split can split the string into a list of string by the separator ("|" character here) then you can check is the key in that list or not.



            The following solution is a little bit tricky. If you don't want to hardcode the positions into your source you can use locals().



            #!/usr/bin/python3

            MyAttr = [
            ('ref', 'Reference|Referenz|Referenz-Nr|Referenznummer'),
            ('color', 'Color|color|tinta|farbe|Farbe')
            ]

            ImportAttr = [
            ('Referenz', 'Ref-Val'),
            ('color', 'red'),
            ]

            ref, color = None, None

            for var, names in MyAttr:
            for key, value in ImportAttr:
            if key in names.split('|'):
            locals()[var] = value
            break

            print("ref: ", ref)
            print("color: ", color)






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Nov 27 '18 at 21:34

























            answered Nov 25 '18 at 9:31









            Miklos HorvathMiklos Horvath

            357313




            357313








            • 1





              What are the "a" and "b" in the LOOKUPS? If you want to finde the keys whith them then better to use a dict instead of a list of tuples.

              – Miklos Horvath
              Nov 25 '18 at 9:35











            • Well said, Question is not clear though!

              – pygo
              Nov 25 '18 at 9:43











            • @MiklosHorvath "a" and "b" are not needed, was a try to solve it. The only thing that matters is the different sorts for Reference and Color. My goal is to match those and other variants in order to match "Reference" inside key and "color" inside key

              – merlin
              Nov 25 '18 at 13:05











            • @MiklosHorvath I edited the question to make it clearer

              – merlin
              Nov 27 '18 at 16:50











            • Ok, I see you have changed the positions in the myAttr (LOOKUPS). I need to edit my post because the readers downvoted it after your edit. They thought my answer is bad but not just your queston changed :D

              – Miklos Horvath
              Nov 27 '18 at 21:08














            • 1





              What are the "a" and "b" in the LOOKUPS? If you want to finde the keys whith them then better to use a dict instead of a list of tuples.

              – Miklos Horvath
              Nov 25 '18 at 9:35











            • Well said, Question is not clear though!

              – pygo
              Nov 25 '18 at 9:43











            • @MiklosHorvath "a" and "b" are not needed, was a try to solve it. The only thing that matters is the different sorts for Reference and Color. My goal is to match those and other variants in order to match "Reference" inside key and "color" inside key

              – merlin
              Nov 25 '18 at 13:05











            • @MiklosHorvath I edited the question to make it clearer

              – merlin
              Nov 27 '18 at 16:50











            • Ok, I see you have changed the positions in the myAttr (LOOKUPS). I need to edit my post because the readers downvoted it after your edit. They thought my answer is bad but not just your queston changed :D

              – Miklos Horvath
              Nov 27 '18 at 21:08








            1




            1





            What are the "a" and "b" in the LOOKUPS? If you want to finde the keys whith them then better to use a dict instead of a list of tuples.

            – Miklos Horvath
            Nov 25 '18 at 9:35





            What are the "a" and "b" in the LOOKUPS? If you want to finde the keys whith them then better to use a dict instead of a list of tuples.

            – Miklos Horvath
            Nov 25 '18 at 9:35













            Well said, Question is not clear though!

            – pygo
            Nov 25 '18 at 9:43





            Well said, Question is not clear though!

            – pygo
            Nov 25 '18 at 9:43













            @MiklosHorvath "a" and "b" are not needed, was a try to solve it. The only thing that matters is the different sorts for Reference and Color. My goal is to match those and other variants in order to match "Reference" inside key and "color" inside key

            – merlin
            Nov 25 '18 at 13:05





            @MiklosHorvath "a" and "b" are not needed, was a try to solve it. The only thing that matters is the different sorts for Reference and Color. My goal is to match those and other variants in order to match "Reference" inside key and "color" inside key

            – merlin
            Nov 25 '18 at 13:05













            @MiklosHorvath I edited the question to make it clearer

            – merlin
            Nov 27 '18 at 16:50





            @MiklosHorvath I edited the question to make it clearer

            – merlin
            Nov 27 '18 at 16:50













            Ok, I see you have changed the positions in the myAttr (LOOKUPS). I need to edit my post because the readers downvoted it after your edit. They thought my answer is bad but not just your queston changed :D

            – Miklos Horvath
            Nov 27 '18 at 21:08





            Ok, I see you have changed the positions in the myAttr (LOOKUPS). I need to edit my post because the readers downvoted it after your edit. They thought my answer is bad but not just your queston changed :D

            – Miklos Horvath
            Nov 27 '18 at 21:08













            0














            If you want, you can also use pandas to solve this problem for the large data sets in this way.




            get_references_and_colors.py


            import pandas as pd
            import re
            import json

            def get_references_and_colors(lookups, attrs):
            responses =

            refs = pd.Series(re.split(r"|", lookups[0][0]))
            colors = pd.Series(re.split(r"|", lookups[1][0]))
            d = {"ref": refs, "color": colors}
            df = pd.DataFrame(d).fillna('') # To drop NaN entries, in case if refs
            # & colors are not of same length

            # ref color
            # 0 Reference Color
            # 1 Referenz color
            # 2 Referenz-Nr tinta
            # 3 Referenznummer farbe
            # 4 Farbe

            for key, value in attrs:
            response = {}
            response["for_attr"] = key

            df2 = df.loc[df["ref"] == key]; # find in 'ref' column

            if not df2.empty:
            response["ref"] = value
            else:
            df3 = df.loc[df["color"] == key]; # find in 'color' column
            if not df3.empty:
            response["color"] = value
            else:
            response["color"] = None # Not Available
            response["ref"] = None

            responses.append(response)

            return responses


            if __name__ == "__main__":

            LOOKUPS = [
            ('Reference|Referenz|Referenz-Nr|Referenznummer', 'a'),
            ('Color|color|tinta|farbe|Farbe', 'b'),
            ]

            ATTR = [
            ('Referenz', 'Ref-Val'),
            ('color', 'red'),
            ('color2', 'orange'), # improper
            ('tinta', 'Tinta-col')
            ]

            responses = get_references_and_colors(LOOKUPS, ATTR) # dictionary
            pretty_response = json.dumps(responses, indent=4) # for pretty printing
            print(pretty_response)



            Output


            [
            {
            "for_attr": "Referenz",
            "ref": "Ref-Val"
            },
            {
            "for_attr": "color",
            "color": "red"
            },
            {
            "for_attr": "color2",
            "color": null,
            "ref": null
            },
            {
            "for_attr": "tinta",
            "color": "Tinta-col"
            }
            ]





            share|improve this answer




























              0














              If you want, you can also use pandas to solve this problem for the large data sets in this way.




              get_references_and_colors.py


              import pandas as pd
              import re
              import json

              def get_references_and_colors(lookups, attrs):
              responses =

              refs = pd.Series(re.split(r"|", lookups[0][0]))
              colors = pd.Series(re.split(r"|", lookups[1][0]))
              d = {"ref": refs, "color": colors}
              df = pd.DataFrame(d).fillna('') # To drop NaN entries, in case if refs
              # & colors are not of same length

              # ref color
              # 0 Reference Color
              # 1 Referenz color
              # 2 Referenz-Nr tinta
              # 3 Referenznummer farbe
              # 4 Farbe

              for key, value in attrs:
              response = {}
              response["for_attr"] = key

              df2 = df.loc[df["ref"] == key]; # find in 'ref' column

              if not df2.empty:
              response["ref"] = value
              else:
              df3 = df.loc[df["color"] == key]; # find in 'color' column
              if not df3.empty:
              response["color"] = value
              else:
              response["color"] = None # Not Available
              response["ref"] = None

              responses.append(response)

              return responses


              if __name__ == "__main__":

              LOOKUPS = [
              ('Reference|Referenz|Referenz-Nr|Referenznummer', 'a'),
              ('Color|color|tinta|farbe|Farbe', 'b'),
              ]

              ATTR = [
              ('Referenz', 'Ref-Val'),
              ('color', 'red'),
              ('color2', 'orange'), # improper
              ('tinta', 'Tinta-col')
              ]

              responses = get_references_and_colors(LOOKUPS, ATTR) # dictionary
              pretty_response = json.dumps(responses, indent=4) # for pretty printing
              print(pretty_response)



              Output


              [
              {
              "for_attr": "Referenz",
              "ref": "Ref-Val"
              },
              {
              "for_attr": "color",
              "color": "red"
              },
              {
              "for_attr": "color2",
              "color": null,
              "ref": null
              },
              {
              "for_attr": "tinta",
              "color": "Tinta-col"
              }
              ]





              share|improve this answer


























                0












                0








                0







                If you want, you can also use pandas to solve this problem for the large data sets in this way.




                get_references_and_colors.py


                import pandas as pd
                import re
                import json

                def get_references_and_colors(lookups, attrs):
                responses =

                refs = pd.Series(re.split(r"|", lookups[0][0]))
                colors = pd.Series(re.split(r"|", lookups[1][0]))
                d = {"ref": refs, "color": colors}
                df = pd.DataFrame(d).fillna('') # To drop NaN entries, in case if refs
                # & colors are not of same length

                # ref color
                # 0 Reference Color
                # 1 Referenz color
                # 2 Referenz-Nr tinta
                # 3 Referenznummer farbe
                # 4 Farbe

                for key, value in attrs:
                response = {}
                response["for_attr"] = key

                df2 = df.loc[df["ref"] == key]; # find in 'ref' column

                if not df2.empty:
                response["ref"] = value
                else:
                df3 = df.loc[df["color"] == key]; # find in 'color' column
                if not df3.empty:
                response["color"] = value
                else:
                response["color"] = None # Not Available
                response["ref"] = None

                responses.append(response)

                return responses


                if __name__ == "__main__":

                LOOKUPS = [
                ('Reference|Referenz|Referenz-Nr|Referenznummer', 'a'),
                ('Color|color|tinta|farbe|Farbe', 'b'),
                ]

                ATTR = [
                ('Referenz', 'Ref-Val'),
                ('color', 'red'),
                ('color2', 'orange'), # improper
                ('tinta', 'Tinta-col')
                ]

                responses = get_references_and_colors(LOOKUPS, ATTR) # dictionary
                pretty_response = json.dumps(responses, indent=4) # for pretty printing
                print(pretty_response)



                Output


                [
                {
                "for_attr": "Referenz",
                "ref": "Ref-Val"
                },
                {
                "for_attr": "color",
                "color": "red"
                },
                {
                "for_attr": "color2",
                "color": null,
                "ref": null
                },
                {
                "for_attr": "tinta",
                "color": "Tinta-col"
                }
                ]





                share|improve this answer













                If you want, you can also use pandas to solve this problem for the large data sets in this way.




                get_references_and_colors.py


                import pandas as pd
                import re
                import json

                def get_references_and_colors(lookups, attrs):
                responses =

                refs = pd.Series(re.split(r"|", lookups[0][0]))
                colors = pd.Series(re.split(r"|", lookups[1][0]))
                d = {"ref": refs, "color": colors}
                df = pd.DataFrame(d).fillna('') # To drop NaN entries, in case if refs
                # & colors are not of same length

                # ref color
                # 0 Reference Color
                # 1 Referenz color
                # 2 Referenz-Nr tinta
                # 3 Referenznummer farbe
                # 4 Farbe

                for key, value in attrs:
                response = {}
                response["for_attr"] = key

                df2 = df.loc[df["ref"] == key]; # find in 'ref' column

                if not df2.empty:
                response["ref"] = value
                else:
                df3 = df.loc[df["color"] == key]; # find in 'color' column
                if not df3.empty:
                response["color"] = value
                else:
                response["color"] = None # Not Available
                response["ref"] = None

                responses.append(response)

                return responses


                if __name__ == "__main__":

                LOOKUPS = [
                ('Reference|Referenz|Referenz-Nr|Referenznummer', 'a'),
                ('Color|color|tinta|farbe|Farbe', 'b'),
                ]

                ATTR = [
                ('Referenz', 'Ref-Val'),
                ('color', 'red'),
                ('color2', 'orange'), # improper
                ('tinta', 'Tinta-col')
                ]

                responses = get_references_and_colors(LOOKUPS, ATTR) # dictionary
                pretty_response = json.dumps(responses, indent=4) # for pretty printing
                print(pretty_response)



                Output


                [
                {
                "for_attr": "Referenz",
                "ref": "Ref-Val"
                },
                {
                "for_attr": "color",
                "color": "red"
                },
                {
                "for_attr": "color2",
                "color": null,
                "ref": null
                },
                {
                "for_attr": "tinta",
                "color": "Tinta-col"
                }
                ]






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 25 '18 at 13:00









                hygullhygull

                4,14421632




                4,14421632






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • 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.


                    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%2fstackoverflow.com%2fquestions%2f53465977%2fmatching-key-against-different-pairs-in-python%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







                    這個網誌中的熱門文章

                    Xamarin.form Move up view when keyboard appear

                    Post-Redirect-Get with Spring WebFlux and Thymeleaf

                    Anylogic : not able to use stopDelay()