转换数据结构:CSV到字典

2024-10-02 00:36:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个文本文件:

Tomm Sietsema,Rooster and Owl,2.5,El Sapo Cuban Social Club,3.5,St. Anselm,3.0,Shibumi,3.5,Mama Chang,2.5,Punjab Grill,3.0    

Jonathan Golder,Rooster and Owl,3.0,El Sapo Cuban Social Club,3.5,St. Anselm,1.5,Shibumi,5.0,Punjab Grill,3.0,Mama Chang,3.5     

Brette Anderson,Rooster and Owl,2.5,El Sapo Cuban Social Club,3.0,Shibumi,3.5,Punjab Grill,4.0     

Michael Baumer,El Sapo Cuban Social Club,3.5,St. Anselm,3.0,Punjab Grill,4.5,Shibumi,4.0,Mama Chang,2.5    

Corby Kumar,Rooster and Owl,3.0,El Sapo Cuban Social Club,4.0,St. Anselm,2.0,Shibumi,3.0,Punjab Grill,3.0,Mama Chang,2.0    

Pete Wellsworth,Rooster and Owl,3.0,El Sapo Cuban Social Club,4.0,Punjab Grill,3.0,Shibumi,5.0,Mama Chang,3.5    

Jay Samuel,El Sapo Cuban Social Club,4.5,Mama Chang,1.0,Shibumi,4.0

我想要这样的输出:

{    'Tomm Sietsema': {'Rooster and Owl': 2.5, 'El Sapo Cuban Social Club': 3.5,
'The Godfather': 3.0, 'Shibumi': 3.5, 'Mama Chang': 2.5, 'Punjab Grill':
3.0},
    'Jonathan Golder': {'Rooster and Owl': 3.0, 'El Sapo Cuban Social Club':
3.5, 'The Godfather': 1.5, 'Shibumi': 5.0, 'Punjab Grill': 3.0, 'Mama Chang':
3.5}}     

我对Python还不熟悉。我试着使用列表并附加列表。我不知道以后该怎么办。你知道吗

lists=list()    
with open(file_name) as b:       
for line in b:         
    lists.append(line.split(":")[0])   
    lists.append(line.split(":")[1])

Tags: andsocialowlelstclubsapochang
3条回答

所以每行的语法是

name, key1, value1, key2, value2, ...

你想得到

{name: {key1: value1, key2: value2, ...}}

这将给出一个相应的dict:

result = {}
for line in s.split("\n"):
    elements = line.split(",")
    name = elements[0].strip()    
    result[name] = {}

    # now iterate over key, value pairs across the rest of the elements
    for key, value in zip(elements[1::2], elements[2::2]):
        result[name][key.strip()] = float(value)

{'Tomm Sietsema': 
    {'Rooster and Owl': '2.5', 'El Sapo Cuban Social Club': '3.5', 'St. Anselm': '3.0', 'Shibumi': '3.5', 'Mama Chang': '2.5', 'Punjab Grill': '3.0'},
'Jonathan Golder':
    {'Rooster and Owl': '3.0', 'El Sapo Cuban Social Club': '3.5', 'St. Anselm': '1.5', 'Shibumi': '5.0', 'Punjab Grill': '3.0', 'Mama Chang': '3.5'},
'Brette Anderson':
    {'Rooster and Owl': '2.5', 'El Sapo Cuban Social Club': '3.0', 'Shibumi': '3.5', 'Punjab Grill': '4.0'},
'Michael Baumer':
    {'El Sapo Cuban Social Club': '3.5', 'St. Anselm': '3.0', 'Punjab Grill': '4.5', 'Shibumi': '4.0', 'Mama Chang': '2.5'},
'Corby Kumar':
    {'Rooster and Owl': '3.0', 'El Sapo Cuban Social Club': '4.0', 'St. Anselm': '2.0', 'Shibumi': '3.0', 'Punjab Grill': '3.0', 'Mama Chang': '2.0'},
'Pete Wellsworth':
    {'Rooster and Owl': '3.0', 'El Sapo Cuban Social Club': '4.0', 'Punjab Grill': '3.0', 'Shibumi': '5.0', 'Mama Chang': '3.5'},
'Jay Samuel':
    {'El Sapo Cuban Social Club': '4.5', 'Mama Chang': '1.0', 'Shibumi': '4.0'}
}

比其他解决方案要短一些,而且可能更快。作为听写理解做循环应该可以节省一些时间。你知道吗

with open(file_name) as fhin:
    for line in fhin:
        line = line.strip()
        if not line:
            continue

        entry = line.split(',')
        d[entry[0]] = {entry[i]: float(entry[i+1]) for i in range(1, len(entry)-1, 2)}

你可以这样做。你知道吗

my_dict = {} 

with open("my_file.txt", "r") f:
    for line in f:
        key, *values = line.split(",") # key is user name, values are the rest
        tmp = {} # nested dict by user 
        val = iter(values) # smart way to create an iterator from the list
        for k in val:
             tmp[k] = float(next(val)) # add the key to the right value in the nested dict
        my_dict[key] = tmp # add the nested dict to the user

产生你想要的结果。你知道吗

{ "Tomm Sietsema": { "Rooster and Owl": 2.5, "El Sapo Cuban Social Club": 3.5, "St. Anselm": 3.0, "Shibumi": 3.5, "Mama Chang": 2.5, "Punjab Grill": 3.0 }, "Jonathan Golder": { " Rooster and Owl": 3.0, " El Sapo Cuban Social Club": 3.5, " St.Anselm": 1.5, " Shibumi": 5.0, " Punjab Grill": 3.0, " Mama Chang": 3.5 } }

相关问题 更多 >

    热门问题