Ich bin mir nicht sicher, was ich so nennen soll, also sind auch Vorschläge zum Titel willkommen. Ich erstelle ein Programm, das Daten aus einer Datei liest und in der richtigen Reihenfolge ausgibt.Wörterbücher per Schlüssel numerisch mit einem bestimmten Format bestellen
Die Datei immer Daten auf dieser Basis enthalten:
- Name: 1,2,3
- Name_2: 4,5,6
- NAME_3: 10,9,8
Hier ist mein Code für die Daten aus der Datei bekommen:
def getData(file):
data = {}
try:
with open(file + ".txt", "r") as file:
for line in file:
build = line.split(":")
data[build[0]] = build[1]
except FileNotFoundError:
with open(file + ".txt", "a") as file:
pass
return data
Die zurückgegebenen Daten ist:
data = {"Name": "1,2,3\n", "Name_2": "4,5,6\n", "Name_3": "10,9,8\n"
Nun, da ich die Daten habe, bin ich zu „sortieren“ versucht es, Wörterbücher sind nicht wirklich sortierbar so habe ich „OrderedDict.“ Heres der Code:
def sortData(data, choice):
## Sort By Average
if choice == "Average":
for name, score in data.items():
amount = 0
for i in re.finditer("[0-9]{1,2}", score):
amount += 1
average = eval(re.sub(",","+",score))/amount
data[name] = str(average) + "\n"
od_data = collections.OrderedDict(sorted(data.items(), key=lambda t:float(t[1]), reverse=True))
for name, score in od_data.items():
sys.stdout.write("%s: %s" % (name, score))
## Sort By Highest - Lowest
elif choice == "Highest - Lowest":
od_data = collections.OrderedDict(sorted(data.items(), key=lambda t:t[1], reverse=True))
for name, score in od_data.items:
sys.stdout.write("%s: %s" % (name, score)
Wenn die Wahl „Average“ ist, werden die Daten gedruckt, wie es nach und in Ordnung soll. Wenn die Wahl "Höchster - Niedrigster", werden die Daten teilweise um ausgedruckt:
- Name_2: 4,5,6
- Name: 1,2,3
- NAME_3: 10,9 , 8
es funktioniert, wie es sollte, nur dann, wenn die erste „Nummer“ ist nicht „10“ ist, aus irgendeinem Grunde scheint es im Programm als „1“ und „0“ und endet daher bis registrieren sein als unterster Eintrag.
Verwandte. http://stackoverflow.com/questions/4836710/does-python-have-a-built-in-function-for-string-natural-sort –
Warum sprichst du nicht (', ')' und 'map' auf' int'? –