我试图找出为什么我的循环在dict中打印所有内容而不仅仅是值
films = {
"2005": ["Munich", "Steven Spielberg"],
"2006": [["The Prestige", "Christopher Nolan"], ["The Departed", "Martin Scorsese"]]
}
for year in movies:
print (year)
for x in films[year]:
print (films[year])
我希望它能像这样打印
2005
Munich, Steven Spielberg
2006
The prestige, Christopher Nolan
the Departed, Martin Scorsese
但是用括号和撇号来打印这样的
2005
['Munich', 'Steven Spielberg']
答案 0 :(得分:2)
您没有使用 x (我建议使用更好的名字)。
此代码适用于Python 2.7和Python 3.x:
films = {
"2005": ["Munich", "Steven Spielberg"],
"2006": [["The Prestige", "Christopher Nolan"], ["The Departed", "Martin Scorsese"]]
}
for year in sorted(films.keys()):
print(year)
if isinstance(films[year][0], list):
films_list = films[year]
else:
films_list = [films[year]]
for film in films_list:
print(", ".join(film))
print("")
答案 1 :(得分:0)
而不是
print (films[year])
使用
print (", ".join(films[x]))
此构造使用字符串加入列表films[x]
(是 - [x]
,而不是[year]
)的成员
", "
(逗号和空格)作为各个成员之间的分隔符。
答案 2 :(得分:0)
' 2006'的价值是一个嵌套列表,这就是为什么你在输出中得到括号的原因 您可以像这样检查值的类型:
films = {
"2005": ["Munich", "Steven Spielberg"],
"2006": [["The Prestige", "Christopher Nolan"], ["The Departed", "Martin Scorsese"]]
}
for year in sorted(films):
if any([ f for f in films[year] if type(f) == list ]) :
print('{}\n{}\n'.format(year, '\n'.join(', '.join(f) for f in films[year])))
else :
print('{}\n{}\n'.format(year, ', '.join(films[year])))
输出:
2005
Munich, Steven Spielberg
2006
The Prestige, Christopher Nolan
The Departed, Martin Scorsese
注意:
如果嵌套列表超过两个级别,则此代码不起作用
你可以使用递归。