Python добавляет элемент в кортеж

У меня есть объект object.ID, который я пытаюсь сохранить в пользовательском сеансе как кортеж. Когда я добавляю первый, он работает, но кортеж выглядит как (u'2',), но когда я пытаюсь добавить новый, используя mytuple = mytuple + new.id полученную ошибку can only concatenate tuple (not "unicode") to tuple.

Ответ 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)