簡體   English   中英

從文本文件讀入具有可變列的字典

[英]Reading from a text file into a dictionary with variable columns

我目前正在學習有關數據挖掘的知識,正在閱讀的電子書中的示例之一中有一個字典來存儲每個用戶及其歌曲的評分。 這是給出的字典的初始化。

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(':')

我不太確定如何創建字典。 嵌套的字典使我困惑了幾個小時。

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

可以使用json庫更加簡潔。 我們將執行以下操作:

  1. 首先,讓我們分開界線,並分離藝術家姓名和數據。 因此, Angelica, "Blues Traveler": 3.5, "Broken Bells": 2.0, "Norah Jones": 4.5,...字符串Angelica, "Blues Traveler": 3.5, "Broken Bells": 2.0, "Norah Jones": 4.5,...被拆分為兩個字符串Angelica和第二個字符串"Blues Traveler": 3.5, "Broken Bells": 2.0, "Norah Jones": 4.5,...

     username, songs = line.split(',', 1) 
  2. 如果仔細觀察,可以通過將第二個字符串導入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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM