Почему при обходе словаря в Python я получаю кортеж?

Добрый день,

Подскажите, пожалуйста, почему при обходе словаря через FOR я получаю в качестве каждого элеметра - кортеж?
Есть словарь вида:
d = {'0000001141': {'JobTitle': 'Начальник', 'FullName': 'Иванов Иван Иванович', 'EmployeeID': '0000001141', 'MobilePhone': '', 'Office': '', 'ManagerName': 'Петров Петр петрович', 'Department': 'Цех', 'ShortPhoneNumber': '123'}}

Т.е. ключом является строка, а значением - вложенный словарь.
При обходе такого словаря:
for item in d.items():
    print(type(item))
<class 'tuple'>
  • Вопрос задан
  • 549 просмотров
Решения вопроса 2
urtow
@urtow
*nix, python, QA, bagpipe, folk music
items(...)
D.items() -> list of D's (key, value) pairs, as 2-tuples

Потоу что ты получаешь кортеж (ключ, значение). И тебе надо его распаковывать, чтобы получать именно значения, вот так:

for key, value in d.items():
    print(type(key))
    print(type(value))
Ответ написан
Дополню.

Потому что метод items возвращает список кортежей, каждый кортеж из себя представляет ключ: значение.

Дабы получить только значения вложенного словаря применяйте метод values и далее дополнительный цикл, чтобы пройтись по ключам или значениям в зависимости что нужно получить.

for obj in d.values():
    for key, value in obj.items():
        print(key, ":", value)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@abcd0x00
>>> dicts = {'0000000876': {'FullName': 'Сисин Алексей Александрович',
...                         'Department': 'Фармацевтический склад'},
...          '0000000152': {'FullName': 'Возягин Павел Константинович',
...                         'Department': 'Инженерный отдел'},
...          '0000000103': {'FullName': 'Зайцев Александр Александрович',
...                         'Department': 'Коммерческая дирекция'},
...          '0000001015': {'FullName': 'Кочетов Николай Васильевич',
...                         'Department': 'Транспортно-хозяйственный отдел'}}
>>> 
>>> for d in dicts.values():
...     print(d['FullName'])
... 
Кочетов Николай Васильевич
Зайцев Александр Александрович
Сисин Алексей Александрович
Возягин Павел Константинович
>>>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы