2015-10-16 5 views
-2

J'ai un dict qui ressemble àclé Ajouter à dict pour obtenir un dict de dicts

{'apples' : 'in_stock', 'bananas' : 'in_stock', 'oranges' : 'not_in_stock'} 

Je veux boucler sur ceux-ci et ajouter un prix (ou tout autre domaine). L'objectif final est d'avoir un compte. J'imagine que le résultat final ressemblerait beaucoup à ceci.

{ 
{'apples' : 'in_stock', 'count' : 700}, 
{'bananas' : 'in_stock', 'count' : 3}, 
{'oranges' : 'not_in_stock', 'count' : 0} 
} 

Je rencontre des problèmes lors de l'ajout de la clé à chaque clé initiale initiale.

Voici le code avec lequel je travaille pour essayer d'accomplir ceci.

store_dict = {} 
my_query = my_sql_query 

for item in my_query: 
     if item['count'] in store_dict: 
     store_dict[item['count']] += 1 
     else: 
     store_dict[item['count']] = 1 
+0

Vous ne pouvez pas faire cela comme vous l'avez structuré. – KronoS

+1

Votre format de sortie est correct. Voulez-vous un dictionnaire de sortie ou une liste de dictionnaires? –

+0

'stocks = [{stock: status} pour stock, état dans original.items()]' –

Répondre

1

Voici deux options qui utilisent des compréhensions de listes et des dictons. Puisque le format que vous demandez n'est pas une structure de données Python valide, je vous explique comment créer une liste et comment créer une dict.

In [17]: from random import randint 
In [18]: from pprint import pprint 

In [19]: d = {'apples' : 'in_stock', 'bananas' : 'in_stock', 'oranges' : 'not_in_stock'} 

In [20]: l1 = [ { product : stock, 'count' : randint(1,100) if stock == 'in_stock' else 0 } for product, stock in d.items() ] 

In [21]: pprint(l1) 
[{'apples': 'in_stock', 'count': 56}, 
{'count': 0, 'oranges': 'not_in_stock'}, 
{'bananas': 'in_stock', 'count': 74}] 

In [22]: d1 = { product : { 'stock' : stock, 'count' : randint(1,100) if stock == 'in_stock' else 0 } for product, stock in d.items() } 

In [23]: pprint(d1) 
{'apples': {'count': 32, 'stock': 'in_stock'}, 
'bananas': {'count': 83, 'stock': 'in_stock'}, 
'oranges': {'count': 0, 'stock': 'not_in_stock'}} 

In [24]: 
1

Je pense que ce

{ 
'apples': {'in_stock':True, 'count' : 700}, 
'bananas': {'in_stock':True, 'count' : 3}, 
'oranges': {'in_stock':False, 'count' : 0} 
} 

est la structure que vous recherchez. Pour transformer votre dict original dans celui ci-dessus, vous aurez besoin d'avoir un autre dictionnaire pour faire correspondre les produits

original = {'apples' : 'in_stock', 'bananas' : 'in_stock', 'oranges' : 'not_in_stock'} 
to_add = {'apples' : 700, 'bananas' : 3, 'oranges' : 0} 


ret_dict = {} 
for key, item in original.items(): 
    ret_dict[key] = { 
     'in_stock': True if original[key] == 'in_stock' else False, 
     'size':to_add[key] 
    } 


print ret_dict 
0

Vous pouvez parcourir votre code pour construire un nouveau dictionnaire dans le format correct

d = {'apples' : 'in_stock', 'bananas' : 'in_stock', 'oranges' : 'not_in_stock'} 
d2 = [] 
for key in d.keys(): 
    d2.append({key = d[key], "count" : 700}) 

Vous pouvez également choisir d'utiliser le dictionnaire d'origine dans une autre méthode et construire quelque chose à l'effet de

dictionary = { 
"apples" : {"instock" : True, "count": 700}, 
    "oranges" : {"instock": True, "count": 12} 
} 

Ce nouveau dictionnaire peut être consulté dans le followi

dictionary["apples"]["count"] = 500 
+0

Qu'est-ce que 'x'? Voulez-vous dire «clé»? – KronoS

+0

Oui, j'ai modifié la solution d'origine avec ce correctif. –