Python: 打印包含变量的字典字典
我正在尝试从一个字典中获取一些值,这应该是比较简单的事情。
但不知为什么,我无法用一个变量来获取值。
我有两个字典,一个是 uid(用户ID)到用户名的映射(通过 getent passwd 获取),另一个字典则是每个键对应一个字典,基本上是这样的:
dMap = { 12345678: 'username' }
qDict['12345678'] = {'used': '4204224', 'grace': 'none', 'quota': '5242880'}
当然,这两个字典里还有很多其他的值,但我展示的结构就是基本概念。
qDict 的键是一个 uid(这个 uid 应该通过 dMap 字典来映射)。
我遇到问题的地方是:
for k,v in dMap.items():
print 'Key: ',k
print qDict[k]
当我运行脚本时,我得到了:
Traceback (most recent call last):
File "./test.py", line 156, in ?
main()
File "./test.py", line 98, in main
print qDict[k]
KeyError: 26617862
如果我把上面那行 print qDict[k] 注释掉,只打印 k 的值,键名就能正常显示。我也可以在 for 循环外用实际的键名(比如 12345678)来引用字典:
print dMap[26617862] # this works!
print qDict['26617862'] # this works! #NOTE BELOW
我想要做的就是让 for 循环打印出给定键名的字典,类似于打印一个字典里的字典……
我认为问题可能在于(如果你看看下面的 #NOTE 这一行),我需要以某种方式用正确格式的变量来呈现字典(qDict)。
我是不是漏掉了什么,或者有没有更简单的方法来做到这一点?
PS:我也尝试过用 dMap.keys() 等来做 for 循环。
2 个回答
dMap
里的键是整数,而qDict
里的键是字符串。
在把你的整数k
用作qDict
的键之前,你需要把它转换成字符串:
for k in dMap:
print 'Key: ',k
print qDict[str(k)]
你用不同类型的键创建了两个字典。一个字典的键是整数,另一个字典的键是字符串。
正如@Mark Byers所说,你可以把整数转换成字符串来查找。
不过,我建议你还是用整数键来构建qDict
。在你创建qDict
的代码里,把键用int()
包裹起来,这样就能确保它是整数键。
其实两种方法都可以用。但如果dMap
的键是int
类型,而qDict
的键是str
类型,那么在qDict
中可能会有一些键在dMap
中找不到。如果这两个字典要匹配,最好它们的键类型是一样的。而且int
在效率上应该稍微好一些,所以如果你的程序规模变大,选择int
会更合适。