2017-02-08 6 views
1

Ich versuche, eine Abfrage zu durchlaufen, ein Wörterbuch für jedes Element zu erstellen und dann jedes Wörterbuch zu einer Liste hinzuzufügen. Ich muss überprüfen, ob das Wörterbuch existiert und dann den Wert aktualisieren, wenn dies der Fall ist. Mein Problem ist, dass ich nicht weiß, wie man die Liste nach dem Betrag sortiert.Richtiger Weg zum Erstellen einer Liste von Wörterbüchern und Sortieren nach Wert in Wörterbüchern

Vielleicht ist dies nicht der beste Weg, um dicts zu erstellen?

Hier ist mein Code:

#Create list 
my_list_of_dicts = [] 

#Create dict object 
my_dict = {} 



#Find every user in query_set 
for item in query_set: #query_set is a list of objects from a Django query: <QuerySet [<User: name123>, <User: name123>, <User: name456>, <User: name789>,]> 

    if item.name in my_dict: 
     #Update object 
     my_dict[item.name]['amount'] += item.amount 
    else: 
     #Create object 
     my_dict[itemrecruiter] = {'amount': item.amount, 'not-important' item.foo} 


#Add dict to list 
recruiters.append(my_dict) 


print(my_list_of_dicts) 
>>> [{"name123": {"amount": 8, 'not-important': 'foo123'}, "name456": {"amount": 3, 'not-important': 'foo456'}, "name789": {"amount": 20, 'not-important': 'foo789'}}] 
+0

In Ihrem Beispiel in der Liste nur ein Element haben, ist das, was du bist versuchen zu erreichen? oder Sie wollen eine Liste von '{" name123 ": {" betrag ": 8,}}' –

+1

Bitte geben Sie das Beispiel query_set an. Es erklärt das Problem besser. –

+0

Ich könnte etwas falsch gemacht haben! Ich möchte eine Liste mit jedem Namen haben und dann den Betrag mit dem Namen verknüpfen. Ich bin offen für den Vorschlag, dies besser zu machen! –

Antwort

1

Angenommen dict_ das Wörterbuch Variable in der Liste enthalten ist (hier a[0]), können Sie dies tun:

import operator 
output = sorted(dict_.items(), key = lambda x : x[1]['amount']) 

Ausgang:

[('name456', {'amount': 3}), ('name123', {'amount': 8}), ('name789', {'amount': 20})] 
+1

Upvoted aber warum nicht 'output = sorted (dict_.items(), key = Lambda x: x [1] ['Menge'])' –

+1

Fertig, danke für den Vorschlag. :) @ OrDuan – Jarvis

0

Warum möchten Sie Ihr Wörterbuch zu einer Liste hinzufügen, wenn sie Jus halten? t ein Wert, komplizieren Sie Ihren Code möglicherweise nur mehr. Versuchen Sie dies und sehen, ob es für Sie

# Create dictionary here 
my_dict = {} 

# Query from db 
for item in query_set: 
    if item.name in my_dict: # If the item already exist in the dictionary 
     my_dict[item.name] += item.amount # just update the amount 
    else: # If the item does exit in the dictionary then create it 
     my_dict[item.name] = item.amount 

>>>print my_dict 
{"name123": 8, "name456": 3, "name789": 20} 
>>>my_dict["name123"] 
8 

funktioniert und Sie können immer eine Schleife über das Wörterbuch wie diese

>>>>for key in my_dict: 
     print key,":", my_dict[key] 
name123 : 8 
name456 : 3 
name789 : 20 
+0

Nur versuchen, meine Frage zu vereinfachen. Es enthält zwei Werte. Betrag und ein anderer Wert. –

Verwandte Themen