只打印字典值

时间:2017-04-17 19:19:12

标签: python

我试图找出为什么我的循环在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']  

3 个答案:

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

注意:
如果嵌套列表超过两个级别,则此代码不起作用 你可以使用递归。