只打印dict值

2024-09-28 03:18:44 发布

您现在位置: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']  

Tags: theinforyeardictmartinprintchristopher
3条回答

“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

注:
如果嵌套列表的深度超过两层,则此代码将不起作用,
你可以使用递归。你知道吗

您没有使用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("")

而不是

print (films[year])

使用

print (", ".join(films[x]))

此构造使用字符串
连接列表films[x](yes-[x],not[year])的成员 ", "(逗号和空格)作为单个成员之间的分隔符。你知道吗

相关问题 更多 >

    热门问题