我有一个电话号码字典,其中数字是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。是什么原因导致的?如何解决?非常感谢。
答案 0 :(得分:1)
问题
您是mutating a dict while iterating it。不要这样Pythonic约定为:
new_dict = {}
a_dict
的同时,将新项目分配给new_dict
。new_dict
IOW,创建新事物,而不是更改旧事物,这可能是您麻烦的根源。
一些笔记