2016-04-28 9 views
0

Ich habe Probleme suchen, wenn ein Schlüssel und entsprechender Wert aus einem Wörterbuch (Lager) in einem anderen Wörterbuch (Korb) istWie überprüft man, ob ein Schlüssel und ein Wert aus einem Wörterbuch in einem anderen ist?

ist dies der Fehler, den ich erhalte:

File "C:/Users/mbbx2wc3/.spyder2-py3/temp.py", line 35, in <module> 
    if stock['10005'] in basket: 

TypeError: unhashable type: 'dict' 

Und dies ist mein Code wenn Sie schauen wollen. Ich habe versucht, Stock [Schlüssel] im Warenkorb. aber das gibt einen Fehler und ich kann mir keine Alternative zu versuchen vorstellen.

Vielen Dank

 stock = { 
      '10005' : { 
        'name' : 'Conference Pears Loose', 
        'price' : 2.00, 
        'unit' : 'kg', 
        'promotion' : None, 
        'group' : None, 
        'amount' : 1.550 
      }, 
      '10013' : { 
        'name' : 'Emmental Slices 250G', 
        'price' : 1.75, 
        'unit' : 'pieces', 
        'promotion' : 'get2pay1', 
        'group' : None, 
        'amount' : 9 
      }, 
      '10015' : { 
        'name' : 'Diced Beef 400G', 
        'price' : 4.50, 
        'unit' : 'pieces', 
        'promotion': 'get4pay3', 
        'group' : 4, 
        'amount' : 14 
      }} 

     basket = {} 

     if stock['10005'] in basket: 
      print("yay") 
     else: 
      print("noo") 
+0

'in' Tests Schlüssel Mitgliedschaft für dicts. Versuchen Sie 'if stock ['10005'] in basket.values ​​()' als Ausgangspunkt. –

+0

Danke Alex, das hat es geschafft –

Antwort

1

einfach den Schlüssel verwenden ...

if '10005' in basket: 
    print("it's in basket") 
elif '10005' in stock: 
    print("it's in stock") 
else: 
    print("it's nowhere") 
1

Sie suchen, wenn der Wert der Aktie zu sehen [ '10005'], die einige große dict ist, ist auch ein Schlüssel im Korb.

https://docs.python.org/2/library/stdtypes.html#typesmapping

Ein Wörterbuch der Schlüssel sind nahezu beliebige Werte. Werte, die nicht hashbar sind, dh Werte, die Listen, Wörterbücher oder andere veränderbare Typen enthalten (die nach Wert und nicht nach Objektidentität verglichen werden), dürfen nicht als Schlüssel verwendet werden.

Ich denke, vielleicht wollen Sie, wenn ‚10005‘ in den Warenkorb legen, um zu sehen

0

Sie so etwas wie dies versuchen:

key = 'a key your are testing' 
if basket.get(key, false) == stock[key]: 
    print('yes') 
else: 
    print('no') 
0

Zunächst einmal kann man nicht testen, ob etwas ein Wörterbuch enthält. Die Fehlermeldung TypeError: unhashable type: 'dict' sagt Ihnen im Grunde, dass; Es gibt einige Details darüber here.

Sie werden wahrscheinlich einen zweistufigen Prozess müssen:

  1. Ist ein Schlüssel im Zielwörterbuch?
  2. Passt der entsprechende Wert?

Zum Beispiel:

if '10005' in basket and basket['10005'] == stock['10005']: 
    print "Yup" 
else: 
    print "Nope" 
0
import json 
stock = { 
     '10005' : { 
       'name' : 'Conference Pears Loose', 
       'price' : 2.00, 
       'unit' : 'kg', 
       'promotion' : None, 
       'group' : None, 
       'amount' : 1.550 
     }, 
     '10013' : { 
       'name' : 'Emmental Slices 250G', 
       'price' : 1.75, 
       'unit' : 'pieces', 
       'promotion' : 'get2pay1', 
       'group' : None, 
       'amount' : 9 
     }, 
     '10015' : { 
       'name' : 'Diced Beef 400G', 
       'price' : 4.50, 
       'unit' : 'pieces', 
       'promotion': 'get4pay3', 
       'group' : 4, 
       'amount' : 14 
     }} 

basket = {} 
for item in stock.keys(): 
    if item in basket.keys(): 
     print("This key " + item + " is in basket") 
    else: 
     print("This key " + item + " is not in basket") 

for item in stock.values(): 
    if item in basket.values(): 
     print("This value " + json.dumps(item) + " is in basket") 
    else: 
     print("This value " + json.dumps(item) + " is not in basket") 
Verwandte Themen