Как добавить и унифицировать кортеж

1
d1 = ({'x':1, 'y':2}, {'x':3, 'y':4})
d2 = ({'x':1, 'y':2}, {'x':5, 'y':6}, {'x':1, 'y':6, 'z':7})

У меня есть два кортежа d1 и d2. Я знаю, что кортежи immutable. Поэтому я должен добавить другой кортеж, используя список. Есть ли лучшее решение.

Следующий вопрос: Как унифицировать кортеж на клавишах "x" . если "x" : 1 в ключах дважды появляется, это дуликат.

append_tuple = ({'x':1, 'y':2}, {'x':5, 'y':6}, {'x':1, 'y':6, 'z':7}, {'x':1, 'y':2}, {'x':3, 'y':4})

unique_tuple = ({'x':1, 'y':2},  {'x':3, 'y':4}, {'x':5, 'y':6})

Примечание: Я хочу удалить дубликат элемента из кортежа dict, если значения ключа говорят, что "x" имеет значение сохранения в двух dict, то это дубликат элемента.

  • 0
    Можете ли вы дать нам немного больше контекста для того, что вы пытаетесь сделать?
  • 0
    Вторая часть, кажется, дублирует stackoverflow.com/questions/3665414/…
Показать ещё 3 комментария
Теги:

2 ответа

2

Кортежи, как правило, относятся к данным, где количество элементов фиксировано, и каждое место имеет свое "значение", поэтому такие вещи, как сортировка, добавление и удаление дубликатов, никогда не будут очень естественными на кортежах и не предназначены для того, чтобы быть. Если вы застряли с кортежами, конвертируя их в список, делая эти операции, то преобразование обратно вполне разумно.

Для добавления вы должны:

d1 += (ITEM,)

и чтобы расширить, вы просто выполните:

d1 += d2

Для обозначения:

unique_list = []
for i1 in append_tuple:
    if not any((k,v) in i2.items() for (k,v) in i1.items() for i2 in unique_list):
        unique_list.append(i1)
unique_tuple = tuple(unique_list)

Может показаться, что есть более сжатое/изящное решение, но то, что вы пытаетесь сделать, довольно специфично, и для таких вещей лучше быть явным и создавать список в цикле for, чем пытаться заставить это в понимание или подобное.

  • 0
    Если вы просто добавляете кортежи вместе, зачем конвертировать в список? d1 = d1 + d2 работает просто отлично, и в этом отношении d1 + = d2.
  • 0
    @DSM: хороший звонок. Я вспомнил, как кортежи ведут себя странно, когда вы добавляете их, но я предполагаю, что это bc. Обычно я ожидаю, что добавление кортежей происходит попарно. Ред.
2
  • Нет лучшего способа расширить кортеж. Я бы сказал, что если вы постоянно это делаете, вам нужно уйти от кортежа или изменить свой дизайн.

  • Но похоже, что вы используете неправильный тип коллекции. Но вы могли бы удалить дублированные ключи из словаря, используя существующий ответ SO Как идентифицировать элемент кортежа?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню