【问题标题】:How to create a list where each entry is another list containing information from csv file如何创建一个列表,其中每个条目都是另一个列表,其中包含来自 csv 文件的信息
【发布时间】:2020-03-24 10:39:03
【问题描述】:

大家好,任何人都可以帮助我弄清楚如何创建一个列表,其中每个条目都是另一个包含来自 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 排序功能对列表进行排序?

【问题讨论】:

  • 请不要发布您输入数据的屏幕截图,只需将其样本复制到问题中
  • 好的抱歉我是新手,我会修复它
  • 你的问题很不清楚。列表包含列表?列表是什么,其他列表是什么?请举个例子。
  • 好的,所以我想做的是根据用户给出的艺术家创建一个包含所有歌曲标题的列表,然后添加特征以喜欢可跳舞的列表,然后对其进行排序。
  • 舞蹈能力?那是什么?

标签: python python-3.x list file sorting


【解决方案1】:

您可以简单地通过附加到外部列表来制作列表列表。

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) 将排序后的列表存储在一个新变量中(保留原始列表未排序)。序列(如列表)将首先按其第一个值排序,任何平局都将通过按其第二个值排序来打破,等等。如果您想以其他方式排序,您可以指定一个用于比较的键函数项目。例如,如果您想按第二个字母对单词列表进行排序,您可以使用 word_list.sort(key=lambda x: x[1]) 您也可以使用 reverse 关键字进行反向排序,例如 my_list.sort(reverse=True)

【讨论】:

  • 好的,谢谢,如果我的问题不清楚,我想你已经解决了,再次谢谢你
【解决方案2】:

因此,作为如何执行此操作的示例,您可以读取第一行并将其用作键,然后对于您读取的每一行,使用键和行数据来制作字典。这使得在代码中更容易理解我们正在谈论的字段,而不仅仅是提及任意索引值。

获得艺术家列表后,您可以按列表中的任何字段对其进行排序。请记住,该行中的所有字段都是字符串,因此如果我们想按数字排序,我们需要将它们转换为整数。

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']]

【讨论】:

  • 谢谢你的解释你知道我可以去哪里了解更多关于排序的信息我真的很困惑。
  • 排序可能需要一些时间才能掌握。在这种情况下,请记住我们给列表排序,然后它会将每个内部列表提供给 lambda。所以 lambda 将接收内部列表,我们可以选择返回什么。所以在 song_name 的情况下,我们返回内部列表的第一个元素。所以 sort 然后有一个内部列表中所有歌曲名称的列表,并使用它对列表进行排序。
猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 2016-09-13
  • 2017-01-12
  • 2022-12-08
  • 1970-01-01
  • 2013-12-18
相关资源
最近更新 更多