簡體   English   中英

如何創建一個列表,其中每個條目都是另一個包含 csv 文件信息的列表

[英]How to create a list where each entry is another list containing information from csv file

大家好,誰能幫我弄清楚如何創建一個列表,其中每個條目都是另一個包含 csv 信息的列表。 這是我正在使用的 csv 文件示例:

,aecousticnss,danceability,duration_ms,energy,instrumentalness,key,liveness,loudness,mode,speechiness,tempo,time_signature,valence,target,song_title,artist
0,0.0102,0.833,204600,0.434,0.0219,2,0.165,-8.795,1,0.431,150.062,4,0.286,1,Mask Off,Future
1,0.199,0.743,326933,0.359,0.00611,1,0.137,-10.401,1,0.0794,160.083,4,0.588,1,Redbone,Childish Gambino
2,0.0344,0.838,185707,0.412,0.000234,2,0.159,-7.148,1,0.289,75.044,4,0.173,1,Xanny Family,Future

到目前為止,我已經這樣做了:

storage = []

artists = open("spotify.csv")
artist= input("Who is your favourite 
artist?: ")
junk = artists.readline()
 for data in artists:
  datalist = data.strip("\n").split(",")
  if datalist[16] == artist: 
    storage = storage  + 
[datalist[15],datalist[3]]
print(storage)

另外,如何使用 python 3 sort 函數對列表進行排序?

您可以簡單地通過附加到外部列表來制作列表列表。

master_list = []
for n in range(5):
    master_list.append(range(n))
print(master_list)
# [[], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3]]
for sub_list in master_list:
    print(sub_list)
# []
# [0]
# [0, 1]
# [0, 1, 2]
# [0, 1, 2, 3]

使用您的代碼,試試這個:

storage.append([datalist[15], datalist[3]])

您可以使用my_list.sort()對列表進行就地排序,也可以使用my_sorted_list = sorted(my_list)將排序后的列表存儲在新變量中(保留原始列表未my_sorted_list = sorted(my_list) 序列(如列表)將首先按它們的第一個值排序,任何關系都將通過按它們的第二個值排序等來打破。如果你想以其他方式排序,你可以指定一個鍵函數,用於比較項目。 例如,如果您想按第二個字母對單詞列表進行排序,則可以執行word_list.sort(key=lambda x: x[1])您也可以使用 reverse 關鍵字按相反順序進行排序,例如my_list.sort(reverse=True)

因此,作為如何執行此操作的示例,您可以讀取第一行並將其用作鍵,然后對於您讀取的每一行,使用鍵和行數據來制作字典。 這使得在代碼中更容易理解我們正在談論的字段,而不僅僅是提及任意索引值。

獲得藝術家列表后,您可以按列表中的任何字段對其進行排序。 請記住,該行中的所有字段都將是一個字符串,因此如果我們想按數字排序,我們需要將它們轉換為整數。

fav_artist = input("who is your fav artist: ")
fav_artist_songs = []
with open('test.dat') as artists:
    data = {}
    keys = artists.readline().rstrip().split(',')
    for line in artists:
        data = dict(zip(keys, line.rstrip().split(',')))
        if data['artist'] == fav_artist:
            fav_artist_songs.append([data['song_title'], data['duration_ms']])

duration_low_to_high = sorted(fav_artist_songs, key= lambda song: int(song[1]))
song_name_a_2_z = sorted(fav_artist_songs, key= lambda song: song[0])
print(duration_low_to_high)
print(song_name_a_2_z)

輸出

who is your fav artist: Future
[['Xanny Family', '185707'], ['Mask Off', '204600']]
[['Mask Off', '204600'], ['Xanny Family', '185707']]

暫無
暫無

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

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