Python 从文本文件读入具有可变列的词典
我目前正在学习数据挖掘,我正在阅读的电子书中有一个例子,它有一个字典来存储每个用户对一首歌的评分。这是给定词典的初始化Python 从文本文件读入具有可变列的词典,python,python-2.7,Python,Python 2.7,我目前正在学习数据挖掘,我正在阅读的电子书中有一个例子,它有一个字典来存储每个用户对一首歌的评分。这是给定词典的初始化 users ={"Angelica": {"Blues Traveler": 3.5, "Broken Bells": 2.0, "Norah Jones": 4.5, "Phoenix": 5.0, "Slightly Stoopid": 1.5, "The Strokes"
users ={"Angelica": {"Blues Traveler": 3.5, "Broken Bells": 2.0,
"Norah Jones": 4.5, "Phoenix": 5.0,
"Slightly Stoopid": 1.5,
"The Strokes": 2.5, "Vampire Weekend": 2.0},
"Bill": {"Blues Traveler": 2.0, "Broken Bells": 3.5,
"Deadmau5": 4.0, "Phoenix": 2.0,
"Slightly Stoopid": 3.5, "Vampire Weekend": 3.0},
"Chan": {"Blues Traveler": 5.0, "Broken Bells": 1.0,
"Deadmau5": 1.0, "Norah Jones": 3.0,
"Phoenix": 5, "Slightly Stoopid": 1.0}}
如果文本文件中有相同的值,并且每行包含每个用户的信息,那么我一直在想如何创建相同的字典。
这是文本文件中第一行的示例:
Angelica, "Blues Traveler": 3.5, "Broken Bells": 2.0, "Norah Jones": 4.5, "Phoenix": 5.0, "Slightly Stoopid": 1.5, "The Strokes": 2.5, "Vampire Weekend": 2.0
到目前为止,我所拥有的:
with open(text_file) as f:
for line in f:
songs = line.split(',')
for current_song in songs
ratings = current_songs.split(':')
我不太确定怎样编这本词典。嵌套字典让我困惑了几个小时。可以通过json库变得更简洁。我们将做以下工作:
users = {}
with open(text_file) as f:
for line in f:
parts = line.rstrip().split(', ')
name = parts[0]
users[name] = {}
for rating in parts[1:]:
song, score = rating.split(': ')
song = song[1:-1]
users[name][song] = score
print users
Angelica
和第二个字符串“蓝调旅行者”:3.5,“断铃”:2.0,“诺拉·琼斯”:4.5,
username, songs = line.split(',', 1)
json.loads
,可以很容易地将其转换为字典,但是它没有{
和}
使其成为有效的json。因此,我们将手动添加它并将其导入json
songs = "{%s}" % songs
json.loads(songs)
import json
user = {}
with open('my.txt') as f:
for line in f:
username, songs = line.split(',', 1)
songs = "{%s}" % songs
user[username] = json.loads(songs)
print user
可以使用json库使其更加简洁。我们将做以下工作:
Angelica
和第二个字符串“蓝调旅行者”:3.5,“断铃”:2.0,“诺拉·琼斯”:4.5,
username, songs = line.split(',', 1)
json.loads
,可以很容易地将其转换为字典,但是它没有{
和}
使其成为有效的json。因此,我们将手动添加它并将其导入json
songs = "{%s}" % songs
json.loads(songs)
import json
user = {}
with open('my.txt') as f:
for line in f:
username, songs = line.split(',', 1)
songs = "{%s}" % songs
user[username] = json.loads(songs)
print user
@你可以使用defaultdict,但我认为它不够明确,没有任何好处。如果有用户在多行重复播放不相交的歌曲评级,那么我肯定会使用defaultdict,因为否则结果中只会出现给定用户的最后一行。@Apero:您可以使用defaultdict,但我认为它不太明确,没有任何好处。如果有用户在多行上重复使用不相交的歌曲评级,那么我肯定会使用defaultdict,因为否则结果中只会出现给定用户的最后一行。只是迂腐,但这些不是歌曲,它们实际上是艺术家。只是迂腐,但这些不是歌曲,它们实际上是艺术家。