繁体   English   中英

Python:打印带有变量的字典字典

[英]Python: printing dictionary of dictionary with variables

我正在尝试从字典中检索一些值,应该相当容易。

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

我有两个字典,一个字典具有uids->用户名的映射(通过getent passwd),第二个字典包含每个键的字典,基本上是:

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

显然,两个字典都有更多的值,但是我展示的结构是基本概念。

它们对qDict的键将是一个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的值,那么键名就不会出现问题。 我还可以使用实际的键名(12345678)在for循环外引用字典:

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

我想要做的就是让for循环为给定的键名打印字典,有点像打印字典的字典...

我认为问题在于(如果您看#NOTE BELOW行以下),我需要以某种方式为字典(qDict)提供格式正确的变量。

我在这里缺少什么,还是有一种更简单的方法来做到这一点?

PS:我还尝试了dMap.keys()等的for循环。

您使用不同类型的键构建了两个字典。 一个字典有一个整数键,另一个字典有一个字符串键。

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

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

两种方法都行得通,真的。 但是,如果dMap具有int键,而qDict具有str键,则qDict中可能有一些键不能出现在dMap ,并且如果两者匹配,则最好使用相同类型的键。 而且int效率应稍高一些,因此,如果您的程序规模较大,则是更好的选择。

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

您需要先将整数k转换为字符串,然后才能将其用作qDict的键:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM