Ich möchte sie kombinieren:
keys = ['name', 'age', 'food']
values = ['Monty', 42, 'spam']
In ein einziges Wörterbuch:
{'name': 'Monty', 'age': 42, 'food': 'spam'}
Ich möchte sie kombinieren:
keys = ['name', 'age', 'food']
values = ['Monty', 42, 'spam']
In ein einziges Wörterbuch:
{'name': 'Monty', 'age': 42, 'food': 'spam'}
Die beste Lösung ist immer noch:
In [92]: keys = ('name', 'age', 'food')
...: values = ('Monty', 42, 'spam')
...:
In [93]: dt = dict(zip(keys, values))
In [94]: dt
Out[94]: {'age': 42, 'food': 'spam', 'name': 'Monty'}
Umstellen:
lst = [('name', 'Monty'), ('age', 42), ('food', 'spam')]
keys, values = zip(*lst)
In [101]: keys
Out[101]: ('name', 'age', 'food')
In [102]: values
Out[102]: ('Monty', 42, 'spam')
Ich hatte diesen Zweifel, als ich versuchte, ein Problem im Zusammenhang mit einem Diagramm zu lösen. Das Problem, das ich hatte, war, dass ich eine leere Adjazenzliste definieren musste und alle Knoten mit einer leeren Liste initialisieren wollte. Da dachte ich, wie wäre es, wenn ich prüfe, ob das schnell genug ist, ich meine, ob es sich lohnt, eine Zip-Operation durchzuführen, anstatt einfach ein Schlüssel-Wert-Paar zuzuweisen. Schließlich ist der Zeitfaktor in den meisten Fällen ein wichtiger Eisbrecher. Also habe ich die timeit-Operation für beide Ansätze durchgeführt.
import timeit
def dictionary_creation(n_nodes):
dummy_dict = dict()
for node in range(n_nodes):
dummy_dict[node] = []
return dummy_dict
def dictionary_creation_1(n_nodes):
keys = list(range(n_nodes))
values = [[] for i in range(n_nodes)]
graph = dict(zip(keys, values))
return graph
def wrapper(func, *args, **kwargs):
def wrapped():
return func(*args, **kwargs)
return wrapped
iteration = wrapper(dictionary_creation, n_nodes)
shorthand = wrapper(dictionary_creation_1, n_nodes)
for trail in range(1, 8):
print(f'Itertion: {timeit.timeit(iteration, number=trails)}\nShorthand: {timeit.timeit(shorthand, number=trails)}')
Für n_Knoten = 10.000.000 erhalte ich,
Iteration: 2.825081646999024 Kurzschrift: 3,535717916001886
Iteration: 5.051560923002398 Kurzschrift: 6,255070794999483
Iteration: 6.52859034499852 Kurzschrift: 8.221581164998497
Iteration: 8.683652416999394 Kurzschrift: 12,599181543999293
Iteration: 11.587241565001023 Kurzschrift: 15,27298851100204
Iteration: 14.816342867001367 Kurzschrift: 17.162912737003353
Iteration: 16.645022411001264 Kurzschrift: 19,976680120998935
Es ist deutlich zu erkennen, dass ab einem bestimmten Punkt der Iterationsansatz im n_ten Schritt die Zeit, die der Kurzschriftansatz im n-1_ten Schritt benötigt, überholt.
Wenn Sie mit mehr als 1 Satz von Werten arbeiten und eine Liste von Diktaten können Sie dies verwenden:
def as_dict_list(data: list, columns: list):
return [dict((zip(columns, row))) for row in data]
Ein Beispiel aus der Praxis wäre eine Liste von Tupeln aus einer Datenbankabfrage, die mit einem Tupel von Spalten aus derselben Abfrage gepaart ist. Andere Antworten werden nur für 1 zu 1 gegeben.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.