1
votes

créer un dictionnaire à partir de deux autres dictionnaires avec des similitudes entre eux

J'ai deux dictionnaires comme celui-ci:

for ki, vi in dict2.items():
    for key, value in (itertools.chain.from_iterable([itertools.product((k, ), v) for k, v in dict3.items()])):
        if (ki == v):
            print vi

Je voudrais créer un dictionnaire comme celui-ci

dict3={'MO'['NUMBER1','NUMBER33'], 'MO2':['NUMBER16']}

J'ai donc développé ce code mais quand j'ajoute les valeurs, cela ne fonctionne pas

dict1= {'MO': ['N-2', 'N-8', 'N-7', 'N-6', 'N-9'], 'MO2': ['N0-6'], 'MO3': ['N-2']}
dict2= {'N-2': ['NUMBER1'], 'N0-6': ['NUMBER16'], 'N-9': ['NUMBER33']


0 commentaires

4 Réponses :


0
votes

Essayez ceci en utilisant defatuldict

defaultdict(list,
            {'MO': [['NUMBER1'], ['NUMBER33']],
             'MO2': [['NUMBER16']],
             'MO3': [['NUMBER1']]})

Output

from collections import defaultdict
d =defaultdict(list)
for k in dict1.keys():
    for value in dict1[k]:
        temp = dict2.get(value)
        if temp:
            d[k].append(temp)


0 commentaires

1
votes

Il vous suffit de parcourir un des dictionnaires:

dict1= {'MO': ['N-2', 'N-8', 'N-7', 'N-6', 'N-9'], 'MO2': ['N0-6'], 'MO3': ['N-2']}
dict2= {'N-2': ['NUMBER1'], 'N0-6': ['NUMBER16'], 'N-9': ['NUMBER33']}
dict3 = {}
for key, subkeys in dict1.items():
    for subkey in subkeys:
        dict3.setdefault(key, []).extend(dict2.get(subkey, []))


0 commentaires

1
votes

Un one-liner. : D

{
    k: [
        y
        for x in xs if x in d2
        for y in d2[x]
    ]
    for k, xs in d1.items()
}
  1. Nous parcourons chaque clé ( k ) et valeur ( xs ) dans d1 .
  2. Pour chaque élément x dans xs , nous trouvons un chemin via d2 si d2 contient x .
  3. Nous aplatissons les listes résultantes en utilisant y ... for y in d2 [x] .

Voici une autre façon de le formater qui pourrait être plus facile à comprendre:

{k: [y for x in xs if x in d2 for y in d2[x]] for k, xs in d1.items()}


0 commentaires

-1
votes

Un autre one-liner:

dict3 = {k1: sum([dict2[x] for x in v1 if x in dict2.keys()], []) for k1,v1 in dict1.items()}


0 commentaires