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

Python:打印带有变量的字典字典,python,dictionary,Python,Dictionary,我正在尝试从字典中检索一些值,这应该相当容易 无论出于何种原因,我都不能使用变量来检索值 我有两个字典,一个是UID->用户名的映射(通过getent passwd),另一个是包含每个键的字典,基本上: dMap = { 12345678: 'username' } qDict['12345678'] = {'used': '4204224', 'grace': 'none', 'quota': '5242880'} 显然,这两个词典都有更多的值,但我展示的结构是基本概念 qDict的关键是

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

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

我有两个字典,一个是UID->用户名的映射(通过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的值,则会打印密钥名称,而不会出现问题。我还可以在for循环之外使用实际的键名(12345678)引用字典:

我想做的是让for循环为给定的keyname打印字典,就像打印字典中的字典一样

我认为问题在于(如果你看下一行的#NOTE),我需要以某种方式向dictionary(qDict)提供格式正确的变量

我有没有遗漏什么,或者有没有更简单的方法


PS:我还尝试了使用dMap.keys()等进行for循环。

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

在将整数
k
用作
qDict
中的键之前,需要将其转换为字符串:

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

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

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

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


这两种方法都可以,真的。但是如果
dMap
int
键和
qDict
str
键,那么
qDict
中可能会有一些键不能出现在
dMap
中,如果要匹配这两个键,最好是使用相同类型的键。而且
int
的效率应该稍微高一点,所以如果你的程序规模较大,它是更好的选择。

是的,这就是它!我最近来自perl,我不记得这些相同类型的问题,但我可能错了。。。谢谢你的帮助。谢谢史蒂夫,我将把这两个键转换成一种通用格式。在本例中,我将使用字符串,因为我需要从用于填充字典的输入文件中删除一些垃圾。
for k in dMap:
    print 'Key: ',k
    print qDict[str(k)]