簡體   English   中英

Dicts中的元組

[英]Tuples in Dicts

是否有可能在python中添加元組作為字典中的值?
如果是,那么我們如何添加新值呢? 我們如何刪除和更改它?

>>> 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}

一般來說,字典中沒有關於元組的具體內容,它們一直表現為元組。

由於元組是不可變的 ,因此無法向元組添加值。 可以做的是從當前元組構造一個新元組和一個額外的值。 +=運算符為您執行此操作,前提是左參數是變量(或者在本例中為字典值):

>>> t = {'k': (1, 2)}
>>> t['k'] += (3,)
>>> t
{'k': (1, 2, 3)}

無論如何,如果你計划改變元組值,也許最好存儲列表? 那些是可變的。

編輯:由於您更新了問題 ,請注意以下事項:

>>> 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')}

:下次請編輯您的實際問題。 不要發布僅包含其他問題的答案。 這不是一個論壇。

你無法改變一個元組本身。 你必須用不同的元組替換它。

當您使用列表時,您還可以向其添加值(更改列表本身),而無需替換它:

>> a = {'list': (23, 32)}
>> a
{'list': [23, 32]}
>> a['list'].append(99)
>> a
{'list': [23, 32, 99]}

在大多數情況下,列表可以用作元組的替代(因為我知道它們支持所有元組函數 - 這是鴨子打字,伙計!)

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)! 但是讓我們繼續吧。

  1. 最初鍵0

    d [0] =('name',datetime.now())

  2. id已知d 1 = d [0] del d [0]

  3. 名稱已更改tmp = d 1 d 1 =(newname,tmp 1

請考慮使用

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"

這看起來比元組更好,並且可以更好地建模數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM