从嵌套字典中按键提取值
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 部分以上是关于从嵌套字典中按键提取值的主要内容,如果未能解决你的问题,请参考以下文章