我试图读取两个.dat文件并创建一个程序,该程序使用aid2name的值作为字典中的键它具有aid2numplays的关键和价值,并被设定为它的价值观。这一切都是为了让文件产生一个包含(艺术家姓名,艺术家ID,剧本频率)的结果。值得注意的是,第一个文件提供了艺术家姓名和艺术家ID,而第二个文件提供了每个用户的用户ID,艺术家ID和频率。任何想法如何聚合这些频率的用户,然后显示他们(艺术家的名字,艺术家ID,播放频率)格式?下面是我迄今管理:在Python 3.6中使用setdefault使用来自两个不同文件的信息显示(名称,ID和频率计数)
import codecs
aid2name = {}
d2 = {}
fp = codecs.open("artists.dat", encoding = "utf-8")
fp.readline() #skip first line of headers
for line in fp:
line = line.strip()
fields = line.split('\t')
aid = int(fields[0])
name = fields[1]
aid2name = {int(aid), name}
d2.setdefault(fields[1], {})
#print (aid2name)
# do other processing
#print(dictionary)
aid2numplays = {}
fp = codecs.open("user_artists.dat", encoding = "utf-8")
fp.readline() #skip first line of headers
for line in fp:
line = line.strip()
fields = line.split('\t')
uid = int(fields[0])
aid = int(fields[1])
weight = int(fields[2])
aid2numplays = [int(aid), int(weight)]
#print(aid2numplays)
#print(uid, aid, weight)
for (d2.fields[1], value) in d2:
group = d2.setdefault(d2.fields[1], {}) # key might exist already
group.append(aid2numplays)
print(group)
这可能有助于看到最终的数据结构应该是什么样子,我不能确定你打算如何使用[setdefault(HTTP的例子:/ /stackoverflow.com/questions/3483520/use-cases-for-the-setdefault-dict-method) – brennan