2014-02-11 2 views
1

У меня есть переменная Python (запись базы данных), которая печатает следующим образом:Как «распаковать» этот кортеж

((79321L, Decimal('11.56125119')),) 

Каков наилучший способ печати эти два значения? Я хочу сделать что-то вроде этого:

print("Count: {}, Result: {}".format(cur.fetchall())) 
+1

Если вы ожидаете только одну строку, как результат, а затем просто использовать 'fetchone()' вместо этого и тогда вы не придется беспокоиться о распаковке этого ... –

ответ

2
In [10]: a=((79321L, Decimal('11.56125119')),) 
#a[0] is a tuple, use "*" to unpack a tuple when passing it as parameters: 
In [11]: "Count: {}, Result: {}".format(*a[0]) 
Out[11]: 'Count: 79321, Result: 11.56125119' 

см how to unpack argument lists и format examples

или использовать old %-formatting operator:

In [13]: "Count: %s, Result: %s"%a[0] 
Out[13]: 'Count: 79321, Result: 11.56125119' 
+0

Спасибо, но вы можете объяснить 'format (* a [0])'? Я новичок в Python, и я раньше не использовал '*'. – MountainX

+0

@MountainX updated;) – zhangxaochen

2

Левая сторона распаковки должна соответствовать структуре правой стороны. Так что это будет работать:

((x, y),) = ((79321L, Decimal('11.56125119')),) 

У вас есть одного элемента кортежа, содержание которого составляет два-элемент кортежа

1

Еще один вариант, для varitey:

value = ((79321L, Decimal('11.56125119')),) 
a, b = list(value)[0] 
+0

Просто 'значение [0]' достаточно здесь - нет необходимости создавать «список», чтобы распаковать его –

2

Если вы ожидаете только одну строку, как результат, а затем просто использовать вместо .fetchone() и тогда вам не придется беспокоиться распаковки, например:

print('Count: {} Result: {}'.format(*cur.fetchone())) 

Или, если у вас есть больше, то цикл над курсором:

for row in cur: 
    print('Count: {} Result: {}'.format(*row)) 
Смежные вопросы