2010-12-21 8 views
2

Für ein Wörterbuch des TypsKey für Wert in Python finden, wenn mit mehreren Werten

{'key1': ['v1','v2','v3', ...], 
'key2': ['v2','v4', ...], 
    ... } 
zugehörigen Schlüssel

Wie kann ich

  1. ein beliebige Taste, mit einem Wert v gefunden
  2. drucken, k: [value set] Paar in ein neues Wörterbuch
+0

Sie meinen, füllen Sie ein neues Wörterbuch mit den neuen Schlüssel-Wert-Paaren? Nicht drucken. – marcog

+0

@Eli finden Sie meine Antwort in einer separaten Kette http://StackOverflow.com/a/13497373/929894 – fewtalks

Antwort

1
# answer to 1st question 
keys_with_value = [k for k, v in old_dict.iteritems() if "whatever_value" in v] 

# answer to 2nd question 
new_dict = {} 
for k in keys_with_value: 
    new_dict[k] = old_dict[k] 

Beispiel:

>>> old_dict = {'key1':['v1','v2','v3'], 'key2':['v2','v4']} 
>>> keys_with_value = [k for k, v in old_dict.iteritems() if "v2" in v] 
>>> new_dict = {} 
>>> for k in keys_with_value: 
     new_dict[k] = old_dict[k] 

>>> new_dict 
{'key2': ['v2', 'v4'], 'key1': ['v1', 'v2', 'v3']} 

>>> new_dict = {} 
>>> keys_with_other_value = [k for k, v in old_dict.iteritems() if "v1" in v] 
>>> for k in keys_with_other_value: 
     new_dict[k] = old_dict[k] 

>>> new_dict 
{'key1': ['v1', 'v2', 'v3']} 
0

In Python 3 ist es noch schöner:

>>> old_dict = {'key1':['v1','v2','v3'], 'key2':['v2','v4']} 
>>> keys_with_value = [k for k, v in old_dict.items() if "v2" in v] 
>>> new_dict = {k: v for k, v in old_dict.items() if "v2" in v} 

gleiches Ergebnis wie Daniel DiPaolo hat. Beachten Sie die .items() anstelle von .iteritems().

1

Eigentlich ist es schneller und einfacher, die zweite Frage zu beantworten (setzen Sie alle passenden Paare in ein neues_Dictionary), dann extrahieren Sie einfach die Liste der Schlüssel, um die erste Frage zu beantworten.

old_dict = {'key1': ['v1','v2','v3','v56','v99'], 
      'key2': ['v2','v4','v42','v17'], 
      'key3': ['v0','v3','v4','v17','v49'], 
      'key4': ['v23','v14','v42'], 
      } 

v = 'v42' 
new_dict = dict(pair for pair in old_dict.iteritems() if v in pair[1]) 
print 'new_dict:', new_dict 
# new_dict: {'key2': ['v2', 'v4', 'v42', 'v17'], 'key4': ['v23', 'v14', 'v42']} 

keys_with_value = new_dict.keys() 
print 'keys_with_value:', keys_with_value 
# keys_with_value: ['key2', 'key4'] 
Verwandte Themen