Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Combine two dictionaries into one in Python

after having carried out unsuccessful research and tests, I have decided to write here. I am trying to merge two dictionaries with the same key into one dictionary by merging the duplicate values.
Specifically, I have this code:
schools =

firestore.collection('schools').document(regione).collection(provincia).document(comune).collections()
message = []
for collection in schools:
    print(collection.id)
    for doc in collection.stream():
        
        message.append({
            collection.id: {
                doc.id: doc.to_dict()
            }
        })
print(message)
return message

I also tried to insert the return after the for, but it just takes the first value only.

Which as a result gives me:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

[
    {
        "Test school": {
            "0": {
                "indirizzo": "Test",
                "INFORMATICA E TELECOMUNICAZIONI": {
                    "3A INF": "G1H8JF"
                }
            }
        }
    },
    {
        "Test School2": {
            "0": {
                "TEST": {
                    "4CCC": "2g45r"
                },
                "indirizzo": "GG1"
            }
        }
    },
    {
        "Test School2": {
            "1": {
                "indirizzo": "gg2",
                "gg": {
                    "asas": "3r3"
                }
            }
        }
    }
]

I want to get this result instead:

{
    {
        "Test School1": {
            "0": {
                "indirizzo": "Test",
                "INFORMATICA E TELECOMUNICAZIONI": {
                    "3A INF": "G1H8JF"
                }
            }
        }
    },
    {
        "Test School2": {
            "0": {
                "TEST": {
                    "4CCC": "2g45r"
                },
                "indirizzo": "GG1"
            },
            "1": {
                  "indirizzo": "gg2",
                  "gg": {
                      "asas": "3r3"
                  }
              }
        }
    }
}

I have tried various codes but I cannot adapt them in my specific case on how to merge the two dictionaries. I hope you can help me out.
collection.id contains the name of the school ("Test School1")

doc.id contains the school account ("0")

doc.to_dict() contains the address and all other information

I use Python 3.9.X

I want to clarify that I have also read various answers on this site and I believe that for this specific case it is not a duplicate.

Thanks so much!

>Solution :

The easiest way of keeping track of what you already have somethinf of, is in a dictionary:

from collections import defaultdict

firestore.collection('schools').document(regione).collection(provincia).document(comune).collections()
message = defaultdict(dict)
for collection in schools:
    print(collection.id)
    for doc in collection.stream():
        message[collection.id][doc.id] = doc.to_dict()
print(message)
return message

If you need everything to be split up in multiple dictionaries, you can then break it up afterwards:

final_result = [{school: d} for school, d in message.items()]
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading