通过一系列词典进行迭代

时间:2014-08-15 21:38:25

标签: python dictionary

我正在尝试定义一系列字典,然后在下面迭代它们。我已经尝试将字典名称放入列表中进行迭代,但这会引发错误,即字符串没有.keys()方法。我认为这是因为Python认为列表中的值只是字符串而不是代表上面的字典。

我不知道我怎么能编写这个代码。代码在这里:

prem_year_map = {
    2011: 2935,
    2012: 3389,
    2013: 3853,
    2014: 4311, 
}
year_tournament_map = {
    2013: 8273,
    2012: 6978,
    2011: 5861,
    2010: 4940,
}

tournament_list = [prem_year_map, year_tournament_map]

for x in tournament_list:
    years = sorted(tournament_list.keys())
    print years

有人可以建议替代方法吗?

由于

3 个答案:

答案 0 :(得分:2)

  

我认为这是因为Python认为列表中的值只是字符串而不是代表上面的字典。

这是不对的。 Python中的列表可以包含任何类型的引用。

你只需要使用object.keys()而不是tournament_list.keys()(后者你要求列表的密钥,不存在 - 字典有密钥)

for x in tournament_list:
    years = sorted(x.keys())
    print years

正如@JonClements所指出的,你也可以使用sorted(x)返回一个列表(在Python 2.x中效率更高一些)。请注意,由于标准字典无法保留订单,因此无法返回字典。

答案 1 :(得分:2)

要迭代字典键和值,您需要使用不同的迭代器。

for key, value in {}.iteritems():
  print key, value

最佳选择是标准itertools

for key, value in itertools.chain(dict1.iteritems(), dict2.iteritems())
  print key, value

您还可以执行迭代器列表并迭代它们。

iterators = []
iterators.append(oneDict.iteritems())

for iterator in iterators:
 for item in iterator:
   yield item # (key, value)

选择最简单的。

答案 2 :(得分:1)

应该是:

for x in tournament_list:
    years = sorted(x.keys())
    print years

否则你试图从字典列表中获取keys(这当然没有意义)。