Одно значение для нескольких ключей
info_dict = {}
with open('xx.txt', 'r') as f:
lines = f.readlines()
for line in lines:
key, value= line.strip().split(':')
info_dict[key] = value
Есть такой код. Представим что есть несколько, почти одинаковых, ключей, для которых должно быть одно значение как это можно сделать?
Ответы (2 шт):
Например, так:
info_dict = {}
with open('xx.txt', 'r') as f:
lines = f.readlines()
for line in lines:
key, value = line.strip().split(':')
# проверяем, если ключ уже существует в info_dict
if key in info_dict:
# если ключ уже существует
if type(info_dict[key]) == str:
# ...и он не является массивом
# то мы просто делаем значение с ключом key массивом
info_dict[key] = [info_dict[key]]
# а если значение уже является массивом
# добавляем в этот массив ещё одно значение
info_dict[key].append(value)
# и переходим к следующей итерации, чтобы значение (массив) не перезаписалось строкой
continue
# если не добавлять выше continue, то выполнится эта строка
info_dict[key] = value # ...и перезапишет массив
print(info_dict)
Код объяснил в комментариях.
Если что-то непонятно, спрашивайте!
Это пример кода, который может решить проблему, но для этого нужно знать все похожие ключи(полагаю с этим проблем не будет их можно получить с помощью того же pymorph3), которые попадают в группу с одинаковым значением и знать, какое значение для этих ключей. В примере словарь из пар ключ-название числа и значение-значение числа, превращается в словарь из пар ключ-название числа и значение-количества цифр в числе.
nums = {'one': 1, 'two': 2, 'three': 3, 'eleven': 11, 'twelve': 12, 'thirteen': 13} #заменим значение числа на длинну числа(1 для однозначных, 2 для двузначных)
lenth = [(['one', 'two', 'three'], 1), (['eleven', 'twelve', 'thirteen'], 2)] #список кортежей в котором первый элемент-список целевых ключей, второй элемент значение для этих ключей
for i in lenth:
for k, v in nums.items():
if k in i[0]:
nums[k] = i[1]
print(nums) # результат {'one': 1, 'two': 1, 'three': 1, 'eleven': 2, 'twelve': 2, 'thirteen': 2}
В целом вам нужно создать список кортежей, в которых будет храниться 2 элемента(список похожих ключей и одно значение для этих ключей), а затем запустить двойной цикл. В примере используется словарь nums, у вас это будет словарь info_dict.