在python中是否可以在字典中添加元组作为值? 如果是,那么我们如何添加新值呢?我们如何删除和更改它?
答案 0 :(得分:20)
>>> a = {'tuple': (23, 32)}
>>> a
{'tuple': (23, 32)}
>>> a['tuple'] = (42, 24)
>>> a
{'tuple': (42, 24)}
>>> del a['tuple']
>>> a
{}
如果您打算使用元组作为键,您可以这样做:
>>> b = {(23, 32): 'tuple as key'}
>>> b
{(23, 32): 'tuple as key'}
>>> b[23, 32] = 42
>>> b
{(23, 32): 42}
一般来说,字典中没有关于元组的具体内容,它们一直表现为元组。
答案 1 :(得分:4)
由于元组是 immutable ,因此无法向元组添加值。你可以做什么,是从当前元组构造一个新元组和一个额外的值。如果左参数是变量(或者在本例中是字典值),+=
运算符会为您执行此操作:
>>> t = {'k': (1, 2)}
>>> t['k'] += (3,)
>>> t
{'k': (1, 2, 3)}
无论如何,如果你计划改变元组值,也许最好存储列表?那些是可变的。
修改:由于您updated提出了问题†,请注意以下事项:
>>> 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
这是因为,如前所述,元组是不可变的。你无法改变它们。如果你想改变它们,那么实际上你必须创建一个新的。因此:
>>> d[42] = ('name2', d[42][2])
>>> d
{42: ('name2', 'date')}
作为旁注,您可能想要使用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')}
†:下次请编辑您的实际问题。 不要发布仅包含其他问题的答案。这不是一个论坛。
答案 2 :(得分:2)
你无法改变元组本身。你必须用不同的元组替换它。
使用列表时,您还可以为其添加值(更改列表本身),而无需替换它:
>> a = {'list': (23, 32)}
>> a
{'list': [23, 32]}
>> a['list'].append(99)
>> a
{'list': [23, 32, 99]}
在大多数情况下,列表可以用作元组的替代(因为我知道它们支持所有元组函数 - 这是鸭子打字,伙计!)
答案 3 :(得分:1)
t1=('name','date')
t2=('x','y')
# "Number" is a String key!
d1={"Number":t1}
# Update the value of "Number"
d1["Number"] = t2
# Use a tuple as key, and another tuple as value
d1[t1] = t2
# Obtain values (getters)
# Can throw a KeyError if "Number" not a key
foo = d1["Number"]
# Does not throw a key error, t1 is the value if "Number" is not in the dict
d1.get("Number", t1)
# t3 now is the same as t1
t3 = d1[ ('name', 'date') ]
您再次更新了问题。请看Python dict docs。 Python文档是其中一个优点!并在命令行上使用解释器(python)!但是让我们继续。
最初键0
d [0] =('name',datetime.now())
已知身份 d 1 = d [0] del d [0]
请考虑使用
class Person(object):
personIdCounter = 1
def __init__(self):
self.id = Person.personIdCounter
Person.personIdCounter += 1
self.name
self.date
然后
persons = {}
person = Person()
persons[person.id] = person
person.name = "something"
persons[1].name = "something else"
这看起来比元组更好,并且可以更好地建模数据。