2017-04-11 3 views
0

Ich bin neu in der Verwendung von Dictionaries in Python. Ich habe ein einfaches Problem zur Hand. Ich habe einen Dictionary namens "Input".Suche nach allen gebräuchlichen und gebräuchlichen Werten in einem Wörterbuch

Input={'VAR1':['K1','K2','K3','K4','K5...'], 
'VAR2':['K3','K4',...], 
'VAR3':['K2','K4','K5',...]} 

Die Anzahl der Tasten im Wörterbuch "Eingang" kann variieren. Der Output-i wünschen, ist eine Liste aller gemeinsamen Werte zu erhalten, und ich will Sub gemeinsame Werte als Wörterbuch erhalten

'K4' string common in all the lists (for all key values) 
'K3' is only present in the list with key'VAR1' and 'VAR2'. 

So hilft es, wenn ich die entsprechenden Tasten haben

Ausgang:

Common_Value=['K4',....] 

Subcommon_Values1=['VAR1':['K3....'],'VAR2':['K3....']] 
Subcommon_values2=['VAR1':['K5',...],'VAR3':['K5',....]] 

Kann mir jemand dabei helfen?

Danke

+0

Können Sie * irgendeinen * Aufwand bei der Lösung dieses Problems demonstrieren? –

+0

Wie bestimmen Sie konzeptionelle, wenn auch nicht programmatische Werte für allgemeine und untergeordnete Werte? –

+0

Ich würde nur überprüfen, ob die Zeichenfolge 'K4' in allen Wertelisten für alle Schlüssel existiert – ayaan

Antwort

1

Dies Sie alle gemeinsamen Werte erhalten:

sect = None 
for k,v in Input.items(): 
    if sect == None: 
     sect = set(v) 
    else: 
     sect = sect.intersection(set(v)) 
Common_Value = list(sect) 

Bis Sie Machen Sie sich klar, was der Unterschied zwischen Ihren verschiedenen SubCommonValues ​​Ergebnissen ist, und ihre tatsächliche Struktur (Sie scheinen Schlüssel in Listen zu haben), kann nicht sicher sein, ob Sie das wollen oder nicht:

all = None 
for k,v in Input.items(): 
    if all == None: 
     all = set(v) 
    else: 
     all = all.union(set(v)) 
diff = all.difference(sect) 
uncom = { x:list() for x in diff } 
for x in diff: 
    for k,v in Input.items(): 
     if x in v: 
      uncom[x].append(k) 
grps = {} 
for k,v in uncom.items(): 
    kv = tuple(v) 
    if kv not in grps: 
     grps[kv] = [k] 
    else: 
     grps[kv].append(k) 
for k,v in grps.items(): 
    print({ x:v for x in k }) 
+0

Wie im Beispiel Output, die ich oben gezeigt. 'K3' existiert in der Liste mit Schlüssel 'VAR1' und mit 'VAR2', ist aber in der 'VAR3'-Liste nicht vorhanden. Um zu wissen, wo die "K3" -Strange vorhanden ist, brauche ich ein Wörterbuch – ayaan

+0

Entschuldigung für die späte Antwort. Aber wenn ich dein Snippet starte, erhalte ich einen Attributfehler. Ich benutze Python 3.5 – ayaan

+0

Danke für die Idee und Ihren Code. Ich habe es ein wenig auf meine Bedürfnisse abgestimmt – ayaan

1

können Sie so etwas wie:

result=[i for i in Input if "K4" in Input[i]] 

Beispiel:

>>> Input={'VAR1':['K1','K2','K3','K4','K5'],'VAR2':['K3','K5'],'VAR3':['K2','K4','K5']} 
>>> result=[i for i in Input if "K4" in Input[i]] 
>>> result 
['VAR1', 'VAR3'] 

EDIT:

vielleicht so etwas wie:

commonValues=['K4', 'K2'] 
result=[i for i in Input if set(commonValues).issubset(set(Input[i]))] 

dies wird die Liste der key in Ihrem Inputdict zurück, die alle Element der commonValues Liste enthalten ...

+0

Ich habe das versucht, aber ich brauche das gemeinsame Werte in einer Liste und die Größe der Listen kann variieren, so dass ich nicht vergleichen konnte. – ayaan

+0

siehe Bearbeiten in meinem Beitrag – Dadep

+0

danke, ich überprüfe es .. @ Dadep – ayaan

Verwandte Themen