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, то это дубликат элемента.
Кортежи, как правило, относятся к данным, где количество элементов фиксировано, и каждое место имеет свое "значение", поэтому такие вещи, как сортировка, добавление и удаление дубликатов, никогда не будут очень естественными на кортежах и не предназначены для того, чтобы быть. Если вы застряли с кортежами, конвертируя их в список, делая эти операции, то преобразование обратно вполне разумно.
Для добавления вы должны:
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, чем пытаться заставить это в понимание или подобное.
Нет лучшего способа расширить кортеж. Я бы сказал, что если вы постоянно это делаете, вам нужно уйти от кортежа или изменить свой дизайн.
Но похоже, что вы используете неправильный тип коллекции. Но вы могли бы удалить дублированные ключи из словаря, используя существующий ответ SO Как идентифицировать элемент кортежа?