2011-11-01 165 views
2

我想从字典中检索一些值,应该相当容易。Python:打印变量字典字典

无论出于何种原因,我无法使用变量来检索值。

我有两个字典,一个具有的UID的映射 - >用户名(经由getent passwd中),以及其中包含的字典用于每个密钥的第二词典,基本上是:

dMap = { 12345678: 'username' } 
qDict['12345678'] = {'used': '4204224', 'grace': 'none', 'quota': '5242880'} 

显然还有很多这两个字典的价值,但我所展示的结构是基本的概念。

他们的qDict关键将是一个UID(应该通过深度贴图字典映射)

如果我有麻烦的是以下几点:

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 

如果我注释掉:打印qDict [K]线之上,并且只打印k的值,键名印刷没有问题。我也可以参考字典外for循环与实际的键名(12345678):

print dMap[26617862]   # this works! 
print qDict['26617862']  # this works!  #NOTE BELOW 

我想要做的就是有for循环打印字典对于给定的键名,类打印字典的字典...我想问题是(如果你看看#NOTE BELOW行)我需要以某种方式呈现正确的格式化变量字典(qDict)。

有没有我在这里失踪的东西,还是有更简单的方法来做到这一点?

PS:我也试过用dMap.keys()循环等

回答

0

dMap的关键是整数,但在qDict键是字符串。

您需要qDict使用它作为一个钥匙之前,你的整数k转换为字符串:

for k in dMap: 
    print 'Key: ',k 
    print qDict[str(k)] 
+0

是的,这就是它! 我最近来自Perl,我不记得这些相同类型的问题,但我可能是错的... 感谢您的帮助。 – billnted

1

您建立使用不同类型的钥匙两个库。一个词典有一个整数键,另一个有一个字符串键。

正如@Mark Byers所说,你可以将整数转换为一个字符串来进行查找。

但是,我建议您改为使用整数键构建qDict。无论您的代码是在哪里构建qDict,将该密钥包装在int()中以强制它成为整数密钥。

无论哪种方式将工作,真的。但是,如果dMapint密钥而qDictstr密钥,则qDict中有一些密钥可能不会出现在dMap中,如果两者匹配,则最好是它们具有相同类型的密钥。而且int应该稍微高效一些,所以如果你的程序比较大,这是更好的选择。

+0

谢谢史蒂夫,我将把这两个键转换为一个通用格式。在这种情况下,我将使用字符串,因为我需要修剪我用来填充字典的输入文件中的一些垃圾。 – billnted