从嵌套字典中按键提取值

Posted

技术标签:

【中文标题】从嵌套字典中按键提取值【英文标题】:Extract values by key from a nested dictionary 【发布时间】:2014-12-06 00:54:53 【问题描述】:

鉴于这个嵌套字典,我如何使用 for 循环打印所有“电话”值?

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

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

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

【问题讨论】:

你有没有尝试过?这不是代码编写服务。 是的,我什么都试过了。我只能弄清楚如何打印单个值(有效),但是在设置 for 循环时,我收到“TypeError:列表索引必须是整数,而不是 unicode”错误。 您引用的错误应该包含在您的帖子中。 如果您已尝试解决问题,则应包括您尝试过的内容以及您遇到的具体问题(包括异常和/或完整堆栈跟踪)。 【参考方案1】:

使用列表推导

>>> [people[i]['phone'] for i in people]
['9102', '2341', '4563']

或者,如果您想使用 for 循环。

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

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

【讨论】:

当第一个是要走的路时,为什么还要打扰第二个选项。顺便说一句,我不明白反对票......也许是因为你应该使用:[people[i].get('phone', 'N/A') for i in people] 但它仍然回答了 OP 的问题 OP 的问题询问了如何做到这一点,特别是使用 for 循环,所以我想我也会把这个选项加入。投反对票是因为人们对定义不明确的问题感到不安,并对线程中的所有内容(包括答案​​)投反对票。坦率地说,我知道会有人投反对票,但我是来帮助人们的,所以一般来说,如果不是太多工作,我会回答这个问题(例如“我怎样才能制作自己的 STL?”)【参考方案2】:
for d in people.values():
    print d['phone']

【讨论】:

既然可以使用 .values(),为什么还要使用 _ 和 .items()? @Apero 因为我太密集了!你是绝对正确的。我会解决的。【参考方案3】:

循环遍历这些值,然后使用get() 方法,如果你想处理丢失的键,或者一个简单的索引来访问嵌套的值。此外,为了优化,您可以在列表理解中完成整个过程:

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

【讨论】:

到底是谁在投票反对一切?!【参考方案4】:

可读的代码比优化的代码更有价值。如果操作完成的时间无关紧要。

【讨论】:

请不要在答案区发布 cmets。 这是一条评论,您将其作为答案发布,请将其放在 cmets 部分

以上是关于从嵌套字典中按键提取值的主要内容,如果未能解决你的问题,请参考以下文章

提取嵌套字典和列表中的叶值集,不包括无

Python从嵌套字典中提取正确的数据

如何从 Python Pandas Dataframe 中的 STRING 列中提取嵌套字典?

如何对字典按键值大小进行排序

从查询字典中提取值

如何从 Python 中的字典中提取所有值?