Это идеальная ситуация для использования Counter структуры данных. Позволяет взглянуть на то, что он делает на нескольких знакомых структурах данных. Давайте начнем с хорошего старого списка.
>>> from collections import Counter
>>> list_a = ["A", "A", "B", "C", "C", "A", "D"]
>>> list_b = ["B", "A", "B", "C", "C", "C", "D"]
>>> c1 = Counter(list_a)
>>> c2 = Counter(list_b)
>>> c1
Counter({'A': 3, 'C': 2, 'B': 1, 'D': 1})
>>> c2
Counter({'C': 3, 'B': 2, 'A': 1, 'D': 1})
>>> c1 - c2
Counter({'A': 2})
>>> c1 + c2
Counter({'C': 5, 'A': 4, 'B': 3, 'D': 2})
>>> c_diff = c1 - c2
>>> c_diff.update([77, 77, -99, 0, 0, 0])
>>> c_diff
Counter({0: 3, 'A': 2, 77: 2, -99: 1})
Как вы можете видеть, это ведет себя как набор, поддерживающий подсчет элементов в качестве значения. Хм, но как насчет использования словаря вместо списка? Словарь сам по себе является подобной множеству структурой, где для значений нам не нужно иметь числа, так как это будет обрабатываться? Давайте взглянем.
>>> dic1 = {"A":"a", "B":"b"}
>>> cd = Counter(dic1)
>>> cd
Counter({'B': 'b', 'A': 'a'})
>>> cd.update(B='bB123')
>>> cd
Counter({'B': 'bbB123', 'A': 'a'})
>>> dic2 = {"A":[1,2], "B": ("a", 5)}
>>> cd2 = Counter(dic2)
>>> cd2
Counter({'B': ('a', 5), 'A': [1, 2]})
>>> cd2.update(A=[42], B=(2,2))
>>> cd2
Counter({'B': ('a', 5, 2, 2), 'A': [1, 2, 42, 42, 42, 42]})
>>> cd2 = Counter(dic2)
>>> cd2
Counter({'B': ('a', 5), 'A': [1, 2]})
>>> cd2.update(A=[42], B=("new elem",))
>>> cd2
Counter({'B': ('a', 5, 'new elem'), 'A': [1, 2, 42]})
Как вы можете увидеть значение мы добавления/изменения должны быть одного и того же типа в update
или он бросает TypeError
. Что касается вашего конкретного случая, просто перейдите с потоком
>>> d = {'cat': 5, 'dog': 9, 'cat': 4, 'parrot': 6, 'cat': 6}
>>> cd3 = Counter(d)
>>> cd3
Counter({'dog': 9, 'parrot': 6, 'cat': 6})
cd3.update(parrot=123)
cd3
Counter({'parrot': 129, 'dog': 9, 'cat': 6})
У вас нет этого словаря, все ключи уникальны. –
У вас не может быть дубликатов в словаре python – Andy
Вам следует рассмотреть вопрос об изменении имени вопроса, поскольку словари не могут иметь дубликаты ключей в первую очередь –