使用地图功能-Python更新列表内的字典键

时间:2019-02-27 18:12:21

标签: dictionary map-function

我有一个电话号码字典,其中数字是Key,国家是值。我想更新密钥并添加基于值国家/地区的国家/地区代码。我试图为此使用map函数:

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':'英国'}]

请注意,第二个美国号码还有2个1。是什么原因导致的?如何解决?非常感谢。

1 个答案:

答案 0 :(得分:1)

问题

您是mutating a dict while iterating it。不要这样Pythonic约定为:

  1. 制作一个new_dict = {}
  2. 迭代输入a_dict的同时,将新项目分配给new_dict
  3. 返回new_dict

IOW,创建新事物,而不是更改旧事物,这可能是您麻烦的根源。

一些笔记

  • 定义变量名称时,请在下划线处使用小写字母(请参见PEP 8)。
  • 查找值而不是更改输入字典,例如a_dict[k]a_dict.pop(k)
  • 缩进正确的空格数(请参见PEP 8