【问题标题】:Mapping dictionary with list of same keys to get values使用相同键列表映射字典以获取值
【发布时间】:2020-06-15 19:36:07
【问题描述】:

我有一个字典 id_names 的形式:

1: 'Nightwatch (1997)', 
2: 'Nobody Loves Me (Keiner liebt mich) (1994)', 
3: 'Wife, The 
.
.
.
100: 'Lamerica (1994)'

它们的键代表电影 ID,值是电影名称。

我正在遍历一个高列表:

# Finding 5 highest values 
high = k.most_common(5) 

for i in high: 
   print(i[0]," :",i[1]," ") 

带输出:

3 : 5.5  
16  : 4.4
7  : 3.7  
42 : 3.6 
83  : 3.3 

此列表的键与字典 id_movies 的键相同。我想要的是以某种方式映射两者,这样我就可以获得电影的名称和分数。

我正在尝试这样的事情:

for i in high: 

print(i[0]," :",i[1]," ") 
for name, age in id_names.iteritems():
   print(movie_titles1[i[0]])

但我知道这不是 python 字典应该如何工作的......

【问题讨论】:

  • 搜索python list comprehension教程

标签: python dictionary


【解决方案1】:

如果i[0] 的值是您的字典键:您可以使用此键从电影字典中获取相应的名称:

for i in high: 
    print(i[0], ":", i[1], movies.get(i[0]))

如果您想将电影的标题和发行日期作为单独的值存储在您的 dict 中,您可以从集合中导入 defaultdict() 并使用列表作为具有单独条目的日期和标题的值。

from collections import defaultdict


movies = defaultdict(list)
movies['1'] = ['Nightwatch', '1997']
movies['2'] = ['Nobody Loves Me (Keiner liebt mich)', '1994']
movies['3'] = ['Wife, The', None]


high = [['3',5.5],['2',4.2],['1',3.7]]

for i in high:
    print(i[0], ":", i[1], "; Title: ", movies.get(i[0])[0],';', "release date: ", movies.get(i[0])[1])

输出:

3 : 5.5 ; Title:  Wife, The ; release date:  None
2 : 4.2 ; Title:  Nobody Loves Me (Keiner liebt mich) ; release date:  1994
1 : 3.7 ; Title:  Nightwatch ; release date:  1997

【讨论】:

  • 我已经试过了,还是不行。它返回 None 的值
  • 您能否分享更多您的脚本,以便我们了解它到底哪里出了问题?
  • 我认为问题可能出在我的电影标题词典上。我将它从包含 id 和电影标题的 2 列数据框中变成了字典。我使用 .to_dict 方法来做到这一点。我相信字典的格式不正确
  • 是的,您的回答实际上是正确的,我会接受您的回答,谢谢您的关注
  • 只检查 pandas 模块中的 to_dict() 方法:还有一个使用 defaultdicts 的选项,因为您已经拆分了数据。 to_dict() 好久没用熊猫了。如果您希望在您的 dict 中有可访问的数据框行,我们明天可以查看它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
相关资源
最近更新 更多