首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据结构转换: CSV到字典

数据结构转换: CSV到字典
EN

Stack Overflow用户
提问于 2019-11-02 21:42:51
回答 5查看 98关注 0票数 0

我有一个像这样的文本文件:

代码语言:javascript
复制
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

我希望输出像这样:

代码语言:javascript
复制
{    '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新手。我试着使用list并附加列表。我不知道接下来该怎么做。

代码语言:javascript
复制
lists=list()    
with open(file_name) as b:       
for line in b:         
    lists.append(line.split(":")[0])   
    lists.append(line.split(":")[1])
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-11-02 21:59:53

你可以做这样的事。

代码语言:javascript
复制
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

产生你想要的结果。

代码语言:javascript
复制
{ "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 } }
票数 1
EN

Stack Overflow用户

发布于 2019-11-02 22:06:42

比其他解决方案要短得多,而且可能更快。将循环作为一种判断理解应该会节省一些时间。

代码语言:javascript
复制
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)}
票数 3
EN

Stack Overflow用户

发布于 2019-11-02 21:57:21

您可以使用,拆分您的行,然后先读取名称,然后按对读取元素,然后将所有这些内容放入嵌套的dicts中。

代码语言:javascript
复制
# import json
result = {}  # outer dict

for line in lines:
    content = line.split(",")   # ['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']
    name = content[0]           # 'Tomm Sietsema'
    name_values = {}            # inner dict

    for i in range(1, len(content), 2):
        val_name = content[i]              # read a element name
        val_float = float(content[i + 1])  # read the float value next
        name_values[val_name] = val_float  # save to inner dict

    result[name] = name_values             # save to outer dict

print(json.dumps(result, indent=4))

因为它给了我

代码语言:javascript
复制
{
    "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
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58675561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档