2015-10-08 11 views
5

Angenommen, ich habe eine Listewie einige vales zu verschiedenen Variablen zuweisen iterativ

[('maindb', 'localhost', 'postgres', 'root')] 

und ich möchte diese vales zu 4 verschiedene Variablen iterativ zuweisen, was die Art und Weise sein?

Ich habe

versucht
[db, host, user, password] = [x for x in user_list] 

aber das funktioniert nicht. Fehler:

ValueError: need more than 1 value to unpack 
+1

'[('maindb', 'localhost', 'postgres', 'root')]' ist eine Liste. Aber es ist eine Liste, die 1 Element enthält, was ein Tupel mit 4 Strings ist. Im Allgemeinen ist das Format "x, y, z = [1, 2, 3]" –

+0

Ist Ihre Liste absichtlich ein Singleton mit dem einzigen Element, das ein 4-Tupel ist? – sgrg

+0

Wissen Sie auch, dass die Liste immer 4 Werte haben wird? – sgrg

Antwort

7

you should use this.

db, host, user, password = user_list[0] 
2

Nicht ganz klar, was Sie zu tun versuchen:

[x for x in user_list] 

genau das gleiche wie das Original user_list Ist aber vorausgesetzt, Sie haben eine Liste von 4- Tupel dann können Sie tun:

Oder noch prägnanter:

for db, host, user, password in user_list: 
    <logic> 

Wenn Sie den Zugriff auf diese Werte genannt wollen Lesbarkeit des Codes zu verbessern, dann Sie an namedtuple und erstellen eine Liste benannter Tupel aussehen könnte. Hier ist, wie namedtuple Arbeit:

from collections import namedtuple 
Account = namedtuple('Account', ['db', 'host', 'user', 'password']) 
account = Account(user_list[0]) 
print(account.db, account.host, account.user, account.password) 

Und eine Liste dieser namedtuples zu erstellen:

accounts = [Account(x) for x in user_list] 
Verwandte Themen