Кортежи в Dicts

Это кажется, что инструмент резервного стиля может быть тем, что Вы ищете.

я использовал SyncBack (одна из версий является бесплатной). Вы могли также испытать SyncToy мс, который пытается сделать перемещение, копирование, синхронизацию, и т.д. легкую.

при реальном копировании просто случайных файлов наугад времена Вы могли бы попробовать Общая Копия , который обладает дополнительным преимуществом работы хорошо по сети (пауза, резюме, и т.д.).

7
задан abyx 23 November 2009 в 18:49
поделиться

4 ответа

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

Вообще говоря, нет ничего особенного в том, что кортежи находятся в словаре, они продолжают вести себя как кортежи.

22
ответ дан 6 December 2019 в 06:03
поделиться

Поскольку кортежи неизменяемы , вы не можете добавлять значения в кортеж. Что вы можете сделать, так это создать новый кортеж из текущего кортежа и дополнительного значения. Оператор + = сделает это за вас, если левый аргумент является переменной (или в данном случае значением словаря):

>>> 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 s. Они работают как обычные кортежи, но позвольте вам ссылаться на элементы в кортеже по имени :

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

: В следующий раз, пожалуйста, отредактируйте ваш вопрос. Не публиковать ответ, содержащий только дополнительные вопросы. Это не форум.

5
ответ дан 6 December 2019 в 06:03
поделиться

Вы не можете изменить сам кортеж. Вы должны заменить его другим кортежем.

Когда вы используете список, вы также можете добавлять в него значения (изменяя сам список) без необходимости его замены:

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

В большинстве случаев списки могут использоваться как замена кортежей (насколько я знаю, они поддерживают все функции кортежей - это утиная печать, чувак!)

2
ответ дан 6 December 2019 в 06:03
поделиться
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') ]

Вы снова обновили свой вопрос. Взгляните на 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"

. Это выглядит лучше, чем кортеж, и лучше моделирует ваши данные.

1
ответ дан 6 December 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: