2015-10-08 8 views
5

Załóżmy, że mam listęjak przypisać pewne Vales do różnych zmiennych iteracyjnie

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

i chcę przypisać te Vales do 4 różnych zmiennych iteracyjnie, co będzie drogę?

Próbowałem

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

ale to nie działa. Błąd:

ValueError: need more than 1 value to unpack 
+1

'[('maindb', 'localhost', 'postgres', 'root')]' jest lista. Ale jest to lista zawierająca 1 pozycję, która jest krotką 4 ciągów. Zasadniczo formatem jest "x, y, z = [1, 2, 3]" –

+0

Czy twoja lista celowo jest singletonem z jedynym elementem będącym 4-krotną? – sgrg

+0

Czy wiesz, że lista będzie zawsze mieć 4 wartości? – sgrg

Odpowiedz

7

you should use this.

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

Nie całkiem jasne, na co chce zrobić:

[x for x in user_list] 

Czy tak samo jak oryginalny lista_użytkowników ale zakładając, że masz listę 4- krotki, możesz wtedy:

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

Lub jeszcze bardziej zwięźle:

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

Jeśli chcesz nazwie dostęp do tych wartości w celu poprawienia czytelności kodu, a następnie można spojrzeć na namedtuple i utworzyć listę nazwanych krotek. Oto jak namedtuple s praca:

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) 

i stworzyć listę tych namedtuples:

accounts = [Account(x) for x in user_list] 
Powiązane problemy