Python 使用for循环填充字典
使用下面的代码生成我命名为“appInfo”的词典时遇到一些问题。这样运行时,只有最后输入的应用程序编号保存在appInfo字典中。看起来应该很容易,但我还没找到解决办法。我正在使用Python 3.5.2Python 使用for循环填充字典,python,for-loop,dictionary,Python,For Loop,Dictionary,使用下面的代码生成我命名为“appInfo”的词典时遇到一些问题。这样运行时,只有最后输入的应用程序编号保存在appInfo字典中。看起来应该很容易,但我还没找到解决办法。我正在使用Python 3.5.2 appDict={'AA':{'appType':'app name one','fileLoc':'C:\\app1.docx'}, 'BB':{'appType':'app name two','fileLoc':'C:\\app2.docx'}, 'CC':{'ap
appDict={'AA':{'appType':'app name one','fileLoc':'C:\\app1.docx'},
'BB':{'appType':'app name two','fileLoc':'C:\\app2.docx'},
'CC':{'appType':'app name three','baseDoc':'C:\\app3.docx'},
'DD':{'appType':'app name four','baseDoc':'C:\\app4.docx'},
'EE':{'appType':'app name five','baseDoc':'C:\\app5.docx'},
'FF':{'appType':'app name six','baseDoc':'C:\\app6.docx'}}
appInfo=dict()
appNumList=[]
while True:
print('Enter an application number (XX-00-00). Press Enter to stop:')
appNum=str(input())
if appNum=='':
break
appNumList=appNumList+[appNum]
appShow='/'.join(appNumList)
appNumLength=len(appNumList)
appNumSep=re.compile(r'[A-Z]+')
mo=appNumSep.findall(appNum)
for num in appDict.keys():
if num in mo:
appInfo[num]=appDict[num]
print(appInfo)
数组mo在while循环的每次迭代中都会被覆盖。在appDict.keys()中循环时,mo仅包含最近的输入。我想你的意思是这样附加到mo:
appDict={'AA':{'appType':'app name one','fileLoc':'C:\\app1.docx'},
'BB':{'appType':'app name two','fileLoc':'C:\\app2.docx'},
'CC':{'appType':'app name three','baseDoc':'C:\\app3.docx'},
'DD':{'appType':'app name four','baseDoc':'C:\\app4.docx'},
'EE':{'appType':'app name five','baseDoc':'C:\\app5.docx'},
'FF':{'appType':'app name six','baseDoc':'C:\\app6.docx'}}
appInfo=dict()
appNumList=[]
mo=[]
while True:
print('Enter an application number (XX-00-00). Press Enter to stop:')
appNum=str(input())
if appNum=='':
break
appNumList=appNumList+[appNum]
appShow='/'.join(appNumList)
appNumLength=len(appNumList)
appNumSep=re.compile(r'[A-Z]+')
mo.append(''.join(appNumSep.findall(appNum))
for num in appDict.keys():
if num in mo:
appInfo[num]=appDict[num]
print(appInfo)
“mo=appNumSep.findall(appNum)”可以在每次迭代时重置值。旁注:一般来说,尤其是在Python 2中,您很少想使用dict的
键方法dict
s已经是其键的可编辑项,因此appDict:
中的num的for获得相同的结果(并避免创建一个临时列表,其中包含Python 2中键的浅拷贝;在Python 3中,它只避免创建一个简单的包装器对象)。当然,由于您也需要该值,因此您应该真正迭代以下项:对于num,appDict.items()中的val:
(.viewitems()
在Py2中以避免复制)如果mo中的num:appInfo[num]=val
。这是一个有趣的捕获。我的mo阵列现在运行正常,但appInfo完全为空。感谢您在我的问题填充代码中找到这个问题!我更改了append()行。我在追加findall()返回的数组,但没有将其合并到单个字符串中。编辑后的代码应该可以工作。