遍历字典列表

31

我有一个列表 -myList-,其中每个元素都是一个字典。 我希望遍历这个列表,但每次只对每个字典中的一个属性 -“age”- 感兴趣。 我还希望计算迭代次数。

我这样做:

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

不过我想知道有没有更具Python风格的方法。有什么建议吗?


1
取决于您想要用它做什么。如果您只想打印它,那么这很好。如果您想使用年龄的某些函数(例如max)创建一个新列表,则可以使用listcomp或genexp。但是,如果您想在entry ['age']上进行大量分支,请坚持使用for循环。[而且您可以跳过分号..] - DSM
4个回答

39

你可以使用生成器仅获取年龄。

# 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

对的,不要使用分号。


30

非常简单的方法,遍历字典列表

>>> 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]

7

对于打印输出,你目前应该已经做得差不多了。但是如果你想要存储这些值,你可以使用列表推导式:

>>> 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

3
在Python中,行末的分号并非必需(尽管您可以使用它们来在同一行上放置多个语句)。因此,省略它们更符合Pythonic风格。
但实际的迭代策略易于理解,并且相当明确地说明了你正在做什么。还有其他方法,但显式的for循环是完全符合Pythonic风格的。
(Niklas B.的答案不会准确地执行您要做的事情:如果您想要做类似的事情,格式字符串应为"{0}\n{1}"。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接