Tema: Re: Q: Python dict() aplungimas
Autorius: Laimis
Data: 2024-10-17 10:50:05
Grzegorz Brzęczyszczykiewicz rašė:

> yra N lygmenų dict(), kurio tik N+1 -ame lygmenyje visada yra list()
> 
> Duomenys ateina iš išorinės sistemos ir nauji duomenys gali atsidurti
> bet kuriame lygmenyje. Leaf'o elementai turi būti unikalūs, bet tai
> sprendžiama per list(set()).
>  Ar Python turi standartine priemones apjungti tokias struktūras?
> 
> Pvz:
> a = {'a': {'b':['cc','dd']}}
> b = {'a': {'b':['c','dd']}, 'b': {'b':['cc','dd']}}
> ->
> {'a': {'b':['c', 'cc','dd']}, 'b': {'b':['cc','dd']}}
> 
> Dabar sprendžįau rekursiškai, pripjoviau grybo ir matau tik paskutinę
> paduotą medžio struktūrą. Ir šiaip kodas baisus gavos :)

Gal irgi baisus kodas, bet...(kind of works):

def merge_dicts(dic1, dic2, skey = ''):
    res = {}
    for key in dic1:
        skey += '.' + key
        if type(dic1[key]) is dict:
            #print("{0} is dict".format(skey))
            if key in dic2:
                res[key] = merge_dicts(dic1[key], dic2[key], skey)
            else:
                res[key] = dic1[key]
        elif type(dic1[key]) is list:
            #print("{0} is list".format(skey))
            if key in dic2:
                if type(dic2[key]) is not list:
                    raise Exception("Different types: " + skey)
                res[key] = list(set(dic1[key] + dic2[key]))
            else:
                res[key] = dic1[key]
    for key in dic2:
        if key not in dic1:
            res[key] = dic2[key]
    return res

3Dastronomyagricultureaudioautosautos.audiautos.audioautos.binariesautos.bmwautos.clubautos.fordautos.hondacrxautos.japanautos.mercedesautos.opelautos.sportautos.volvoautos.vwaviaavia.binariesbankcardsbinariesbooksbuildingcinemacommercecomp.hardwarecomp.softwarecomp.lietuvinimascomp.networksculturedarbas.ieskaudarbas.siulaudesigneconomicselectronicsfaunafauna.aquafauna.binariesfishingflorafotofoto.binariesgamesgames.csgames.onlinegsmgurmanaihumourhumour.binariesinternetlawmicrosoftmotomusicmusic.binariesmusic.instrumentsmusic.LT.binariesnavigacijaphppoliticsprogrammingrpgsportstudyingsveikatatalktesttranslationtransportationtraveltravel.binariestvunixvideovideo.binarieswatersportswwwwww.flashpdaautos.supermama.ltmobiledarbasretro.3Dretro.agricultureretro.astronomyretro.audioretro.autosretro.autos.audiretro.autos.audioretro.autos.binariesretro.autos.bmwretro.autos.clubretro.autos.fordretro.autos.hondacrxretro.autos.japanretro.autos.mercedesretro.autos.opelretro.autos.sportretro.autos.supermamaretro.autos.supermama.ltretro.autos.volvoretro.autos.vwretro.aviaretro.avia.binariesretro.bankcardsretro.beosretro.binariesretro.booksretro.buildingretro.cinemaretro.commerceretro.compretro.comp.hardwareretro.comp.lietuvinimasretro.comp.networksretro.comp.softwareretro.cultureretro.darbasretro.darbas.ieskauretro.darbas.siulauretro.designretro.economicsretro.electronicsretro.e-vejasretro.faunaretro.fauna.aquaretro.fauna.binariesretro.fishingretro.floraretro.fotoretro.foto.binariesretro.gamesretro.games.csretro.games.onlineretro.games.rpgretro.genealogijaretro.gsmretro.gurmanairetro.humourretro.humour.binariesretro.internetretro.YZFretro.YZF.nebukretro.YZF.nebuk.netikintisretro.YZF.nebuk.netikintis.bukretro.YZF.nebuk.netikintis.buk.tikintisretro.lawretro.microsoftretro.mobileretro.motoretro.musicretro.music.binariesretro.music.instrumentsretro.music.LTretro.music.LT.binariesretro.navigacijaretro.newsretro.news.taisyklesretro.newuserretro.pdaretro.phpretro.politicsretro.programmingretro.rpgretro.sportretro.studyingretro.sveikataretro.talkretro.translationretro.transportationretro.travelretro.travel.binariesretro.tvretro.unixretro.videoretro.video.binariesretro.watersportsretro.wwwretro.www.flashdiylt.rkm.news.announcelt.rkm.news.newuser