Python 从嵌套字典中按键提取值

Python 从嵌套字典中按键提取值,python,dictionary,for-loop,nested,Python,Dictionary,For Loop,Nested,有了这个嵌套字典,如何使用for循环打印所有“phone”值 people = { 'Alice': { 'phone': '2341', 'addr': '87 Eastlake Court' }, 'Beth': { 'phone': '9102', 'addr': '563 Hartford Drive' }, 'Randy': { 'phone':

有了这个嵌套字典,如何使用for循环打印所有“phone”值

people = {
    'Alice': {
        'phone': '2341',
        'addr': '87 Eastlake Court'
        },

    'Beth': {
        'phone': '9102',
        'addr': '563 Hartford Drive'
        },

    'Randy': {
        'phone': '4563',
        'addr': '93 SW 43rd'
        }

使用列表理解

>>> [people[i]['phone'] for i in people]
['9102', '2341', '4563']
或者,如果您想对循环使用

l = []
for person in people:
    l.append(people[person]['phone'])

>>> l
['9102', '2341', '4563']

如果要处理缺少的键,请在值上循环,然后使用方法,或者使用简单的索引来访问嵌套值。此外,为了优化,您可以在列表中完成整个过程:

>>> [val.get('phone') for val in people.values()]
['4563', '9102', '2341']

你试过什么吗?这不是代码编写服务。是的,我什么都试过了。我只能知道如何打印一个值(这很有效),但在设置for循环时,我得到了一个“TypeError:列表索引必须是整数,而不是unicode”错误。您引用的错误应该包含在您的帖子中。如果您试图解决这个问题,您应该包括您尝试过的内容和具体问题(包括例外情况和/或完整的堆栈跟踪)。如果第一个选项是可行的,为什么还要麻烦第二个选项呢。顺便说一句,我不理解否决票……可能是因为你应该使用:[people[I]。get('phone',N/A')表示我在people中]但它仍然回答了OP的问题OP的问题是如何做到这一点,特别是使用了一个
for
循环,所以我想我也加入了这个选项。否决票是因为人们对定义不清的问题感到不安,并对一条线索中的所有内容进行否决票,包括答案。坦率地说,我知道否决票就要来了,但我在这里支持他lp people out,所以通常我会回答这个问题,如果它不是太多的工作(例如“我如何制作我自己的STL?”)谁在否决所有东西?!为什么在可以使用.values()?@Apero的时候还要使用u和.items(),因为我太密集了!你完全正确。我会解决它。
>>> [val.get('phone') for val in people.values()]
['4563', '9102', '2341']