【问题标题】: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”错误。
  • 您引用的错误应该包含在您的帖子中。
  • 如果您已尝试解决问题,则应包括您尝试过的内容以及您遇到的具体问题(包括异常和/或完整堆栈跟踪)。

标签: python dictionary for-loop nested


【解决方案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 部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 2016-05-15
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多