我正在尝试定义一系列字典,然后在下面迭代它们。我已经尝试将字典名称放入列表中进行迭代,但这会引发错误,即字符串没有.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
有人可以建议替代方法吗?
由于
答案 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
(这当然没有意义)。