Python: печать словаря словаря с переменными - PullRequest
2 голосов
/ 01 ноября 2011

Я пытаюсь извлечь некоторые значения из словаря, должно быть довольно просто.

По какой-то причине я не могу использовать переменную для получения значения.

У меня есть два словаряодин с отображением uids -> usernames (через 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):

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

Я просто пытаюсь напечатать цикл словаря для данного имени ключа, видпечати словаря словаря ...

Я думаю, что проблема в том, что (если вы посмотрите на строку #NOTE BELOW) мне нужно как-то представить словарь (qDict) с правильно отформатированной переменной.

Есть ли что-то, чего мне здесь не хватает, или есть более простой способ сделать это?

PS: Я также пробовал цикл for с помощью dMap.keys () и т. Д.

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Вы создали два словаря, используя разные типы ключей.Один из них имеет целочисленный ключ, а другой - строковый ключ.

Как сказал @Mark Byers, вы можете преобразовать целое число в строку для поиска.

Однако я рекомендую вамвместо этого соберите qDict с целочисленными ключами.Везде, где ваш код, который строит qDict, оберните ключ в int(), чтобы сделать его целочисленным ключом.

В любом случае, на самом деле все будет работать.Но если у dMap есть клавиши int, а у qDict есть клавиши str, в qDict возможны некоторые клавиши, которые не могут появиться в dMap, и, если они совпадают, лучше, если они простоимеют такой же тип ключа.И int должен быть немного более эффективным, поэтому, если ваша программа масштабируется, это лучший выбор.

0 голосов
/ 01 ноября 2011

Ключи в dMap являются целыми числами, но в qDict ключи являются строками.

Вам нужно преобразовать целое число k в строку, прежде чем использовать его в качестве ключа в qDict:

for k in dMap:
    print 'Key: ',k
    print qDict[str(k)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...