Dicts中的元组

FIL*_*IaS 7 python dictionary tuples

是否有可能在python中添加元组作为字典中的值?
如果是,那么我们如何添加新值呢?我们如何删除和更改它?

Sil*_*ost 22

>>> a = {'tuple': (23, 32)}
>>> a
{'tuple': (23, 32)}
>>> a['tuple'] = (42, 24)
>>> a
{'tuple': (42, 24)}
>>> del a['tuple']
>>> a
{}
Run Code Online (Sandbox Code Playgroud)

如果您打算使用元组作为键,您可以这样做:

>>> b = {(23, 32): 'tuple as key'}
>>> b
{(23, 32): 'tuple as key'}
>>> b[23, 32] = 42
>>> b
{(23, 32): 42}
Run Code Online (Sandbox Code Playgroud)

一般来说,字典中没有关于元组的具体内容,它们一直表现为元组.


Ste*_*202 5

由于元组是不可变的,因此不能向该元组添加值。您可以做的是从当前元组构造一个新的元组并增加一个值。该+=运营商可以实现这个要求,所提供的左参数是一个变量(或在这种情况下,一个字典值):

>>> t = {'k': (1, 2)}
>>> t['k'] += (3,)
>>> t
{'k': (1, 2, 3)}
Run Code Online (Sandbox Code Playgroud)

无论如何,如果您打算更改元组的值,也许最好存储列表?那些是可变的。

编辑:由于您更新了问题,请注意以下几点:

>>> d = {42: ('name', 'date')}
>>> d[42][0] = 'name2'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为,如前所述,元组是不可变的。您无法更改它们。如果要更改它们,那么实际上您必须创建一个新的。从而:

>>> d[42] = ('name2', d[42][2])
>>> d
{42: ('name2', 'date')}
Run Code Online (Sandbox Code Playgroud)

附带说明,您可能需要使用namedtuple。它们就像常规元组一样工作,但是允许您通过名称引用元组中元素:

>>> from collections import namedtuple
>>> Person = namedtuple('Person', 'name date')
>>> t = {42: Person('name', 'date')}
>>> t[42] = Person('name2', t[42].date)
>>> t
{42: Person(name='name2', date='date')}
Run Code Online (Sandbox Code Playgroud)

  :下次请编辑您的实际问题。不要发布仅包含其他问题的答案。这不是论坛。