Обновить ключ словаря внутри списка с помощью функции карты -Python - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть словарь телефонных номеров, где номер - это ключ, а страна - это значение.Я хочу обновить ключ и добавить код страны на основе значения страны.Я попытался использовать функцию карты для этого:

print('**Exmaple: Update phone book to add Country code using map function** ')
user=[{'952-201-3787':'US'},{'952-201-5984':'US'},{'9871299':'BD'},{'01632 960513':'UK'}]

#A function that takes a dictionary as arg, not list. List is the outer part
def add_Country_Code(aDict):
            for k,v in aDict.items():
                if(v == 'US'):
                 aDict[( '1+'+k)]=aDict.pop(k)
                if(v == 'UK'):
                 aDict[( '044+'+k)]=aDict.pop(k)
                if (v == 'BD'):
                 aDict[('001+'+k)] =aDict.pop(k)
            return aDict

new_user=list(map(add_Country_Code,user))

print(new_user)

Это работает частично, когда я бегу, выведите ниже: [{'1 + 952-201-3787': 'US'}, {'1+1 + 1 + 952-201-5984 ':' US '}, {' 001 + 9871299 ':' BD '}, {' 044 + 01632 960513 ':' UK '}]

Обратите внимание на 2-еНомер в США имеет 2 дополнительные единицы.Что вызывает это? Как исправить?Большое спасибо.

1 Ответ

0 голосов
/ 28 февраля 2019

Issue

Вы изменяете диктовку, повторяя ее .Не делай этого.Соглашение Pythonic будет:

  1. Сделать new_dict = {}
  2. Во время итерации ввода a_dict, назначить новые элементы для new_dict.
  3. Вернутьnew_dict

IOW, создавать новые вещи , а не менять старые вещи - вероятно источник ваших бед.

Некоторые примечания

  • Используйте строчные буквы с подчеркиванием при определении имен переменных (см. PEP 8 ).
  • Поиск значений, а не изменение входного словаНапример, a_dict[k] против a_dict.pop(k)
  • Отступить правильное количество пробелов (см. PEP 8 )
...