2013-02-11 2 views

Antwort

12

Machen Sie keine dynamisch benannten Variablen. Es macht es schwer mit ihnen zu programmieren. Verwenden Sie stattdessen eine dict:

x = [100,2,300,4,75] 
dct = {} 
for i in x: 
    dct['lst_%s' % i] = [] 

print(dct) 
# {'lst_300': [], 'lst_75': [], 'lst_100': [], 'lst_2': [], 'lst_4': []} 
+0

Gibt es eine Möglichkeit mit dem zu tun, während der Reihenfolge des ursprünglichen x halten? Stattdessen sehe ich hier und in der Antwort von root, dass die "100, 2, 300, 4, 75" Ordnung nicht erhalten wurde. Ich stelle mir vor, dass dies eine Eigenschaft ist. – Coolio2654

+0

@ Coolio2654: Richtig. 'dict'-Tasten sind nicht geordnet. Um die Reihenfolge beizubehalten, in der die Schlüssel eingefügt wurden, verwenden Sie ein ['collections.OrderedDict'] (https://docs.python.org/2/library/collections.html#collections.OrderedDict): (change' dct = { } '->' import collections' gefolgt von 'dct = collections.OrderedDict()'). – unutbu

5

ein Wörterbuch können Sie Ihre Listen zu halten:

In [8]: x = [100,2,300,4,75] 

In [9]: {i:[] for i in x} 
Out[9]: {2: [], 4: [], 75: [], 100: [], 300: []} 

Um jede Liste zuzugreifen:

In [10]: d = {i:[] for i in x} 

In [11]: d[75] 
Out[11]: [] 

Und wenn Sie wirklich wollen lst_ in jeder haben Etikett:

In [13]: {'lst_{}'.format(i):[] for i in x} 
Out[13]: {'lst_100': [], 'lst_2': [], 'lst_300': [], 'lst_4': [], 'lst_75': []} 
+0

Das war mein erster Gedanke, du gehst zuerst dazu: P –

+1

@ F3AR3DLEGEND - Ich denke es ist der pythischste Weg es zu tun :) – root

+0

Ist das ein * Wörterbuch Verständnis *? :-) –

0

Eine kleine Abweichung von den dict-Lösungen des anderen ist die Verwendung eines Standard-Dict. Sie können den Initialisierungsschritt überspringen, indem Sie den Standardwert des gewählten Typs aufrufen.

In diesem Fall wird der gewählte Typ ist eine Liste, die Ihnen leere Listen im Wörterbuch geben:

>>> from collections import defaultdict 
>>> d = defaultdict(list) 
>>> d[100] 
[]