У меня есть объект object.ID, который я пытаюсь сохранить в пользовательском сеансе как кортеж. Когда я добавляю первый, он работает, но кортеж выглядит как (u'2',)
, но когда я пытаюсь добавить новый, используя mytuple = mytuple + new.id
полученную ошибку can only concatenate tuple (not "unicode") to tuple
.
Python добавляет элемент в кортеж
Ответ 1
Вам нужно сделать второй элемент 1-кортежем, например:
a = ('2',)
b = 'z'
new = a + (b,)
Ответ 2
От кортежа до списка до кортежа:
a = ('2',)
b = 'b'
l = list(a)
l.append(b)
tuple(l)
Или с более длинным списком элементов для добавления
a = ('2',)
items = ['o', 'k', 'd', 'o']
l = list(a)
for x in items:
l.append(x)
print tuple(l)
дает вам
>>>
('2', 'o', 'k', 'd', 'o')
Пункт здесь: List - это тип последовательности изменчивый. Таким образом, вы можете изменить данный список, добавив или удалив элементы. Tuple - это неизменный тип последовательности. Вы не можете изменить кортеж. Поэтому вам нужно создать новый.
Ответ 3
Так как Python 3.5 (PEP 448) вы можете распаковать в кортеж, список и dict:
a = ('2',)
b = 'z'
new = (*a, b)
Ответ 4
>>> x = (u'2',)
>>> x += u"random string"
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
x += u"random string"
TypeError: can only concatenate tuple (not "unicode") to tuple
>>> x += (u"random string", ) # concatenate a one-tuple instead
>>> x
(u'2', u'random string')
Ответ 5
Кортеж может только добавить к нему tuple
. Лучший способ сделать это:
mytuple =(u'2',)
mytuple +=(new.id,)
Я пробовал один и тот же сценарий с данными ниже, все кажется, что он работает нормально.
>>> mytuple = (u'2',)
>>> mytuple += ('example text',)
>>> print mytuple
(u'2','example text')
Ответ 6
# 1 form
a = ('x', 'y')
b = a + ('z',)
print(b)
# 2 form
a = ('x', 'y')
b = a + tuple('b')
print(b)