繁体   English   中英

迭代字典列表

[英]Iterating over list of dictionaries

我有一个列表-myList - 其中每个元素都是一个字典。 我希望迭代这个列表,但我只对每个字典中的一个属性 - “年龄”感兴趣。 我也有兴趣保持迭代次数的计数。

我做:

for i, entry in enumerate(myList):
    print i;
    print entry['age']; 

但是想知道是否有更多的pythonic。 有小费吗?

你可以用一台发电机来抓住年龄。

# Get a dictionary 
myList = [{'age':x} for x in range(1,10)]

# Enumerate ages
for i, age in enumerate(d['age'] for d in myList): 
    print i,age

并且,是的,不要使用分号。

非常简单的方法,字典迭代列表

>>> my_list
[{'age': 0, 'name': 'A'}, {'age': 1, 'name': 'B'}, {'age': 2, 'name': 'C'}, {'age': 3, 'name': 'D'}, {'age': 4, 'name': 'E'}, {'age': 5, 'name': 'F'}]

>>> ages = [li['age'] for li in my_list]

>>> ages
[0, 1, 2, 3, 4, 5]

对于打印,可能你正在做的事情是正确的。 但是如果要存储值,可以使用列表推导:

>>> d_list = [dict((('age', x), ('foo', 1))) for x in range(10)]
>>> d_list
[{'age': 0, 'foo': 1}, {'age': 1, 'foo': 1}, {'age': 2, 'foo': 1}, {'age': 3, 'foo': 1}, {'age': 4, 'foo': 1}, {'age': 5, 'foo': 1}, {'age': 6, 'foo': 1}, {'age': 7, 'foo': 1}, {'age': 8, 'foo': 1}, {'age': 9, 'foo': 1}]
>>> ages = [d['age'] for d in d_list]
>>> ages
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> len(ages)
10

在Python结尾处的分号不是必需的(尽管如果要在同一行上放置多个语句,可以使用它们)。 所以省略它们会更加pythonic。

但实际的迭代策略很容易理解,而且非常清楚你正在做什么。 还有其他方法可以做到这一点。 但是明确的for循环是完全pythonic。

(尼克拉斯·B.的回答不会做正是你正在做的事情:如果你想要做这样的事情,格式字符串应该是"{0}\\n{1}" 。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM