首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python嵌套字典到csv

Python嵌套字典到csv
EN

Stack Overflow用户
提问于 2022-11-24 16:52:28
回答 2查看 30关注 0票数 0

我有一个以这种格式设置的数据:

代码语言:javascript
复制
data = { 'sensor1': {'units': 'x', 'values': [{'time': 17:00, 'value': 10},
                                              {'time': 17:10, 'value': 12}, 
                                              {'time': 17:20, 'value' :7}, ...]}
         'sensor2': {'units': 'x', 'values': [{'time': 17:00, 'value': 9},
                                              {'time': 17:20, 'value': 11}, ...]}
        }

我想收集数据,放入csv,比如:

代码语言:javascript
复制
time, sensor1, sensor2
17:00, 10, 9,
17:10, 12, ,
17:20, 7, 11,
...

我需要使用csv模块,所以我需要这样的字典列表:

{‘时间’:17:00,‘感觉1’:10,‘感觉2’:9},

我知道

代码语言:javascript
复制
fields = list(data.keys())

将进入csv写入作为标题。这只是我不能正确格式化的行。尤其是由于时间并不总是存在于这两个传感器中。例如,17:10在传感器1中有一个值,但在传感器2中不存在。

EN

回答 2

Stack Overflow用户

发布于 2022-11-24 19:38:25

您可以使用pandas从数据创建数据,并将其保存为CSV:

代码语言:javascript
复制
import pandas as pd

data = {
    "sensor1": {
        "units": "x",
        "values": [
            {"time": "17:00", "value": "10"},
            {"time": "17:10", "value": "12"},
            {"time": "17:20", "value": "7"},
        ],
    },
    "sensor2": {
        "units": "x",
        "values": [
            {"time": "17:00", "value": "9"},
            {"time": "17:20", "value": "11"},
        ],
    },
}

df = pd.DataFrame(
    [
        {"time": vv["time"], "column": k, "value": vv["value"]}
        for k, v in data.items()
        for vv in v["values"]
    ],
)
df = df.pivot(index="time", columns="column", values="value").reset_index()

df.to_csv("data.csv", index=False)

保存data.csv

代码语言:javascript
复制
time,sensor1,sensor2
17:00,10,9
17:10,12,
17:20,7,11
票数 0
EN

Stack Overflow用户

发布于 2022-11-24 21:18:02

你可以分两步完成。

代码语言:javascript
复制
data = { 'sensor1': {'units': 'x', 'values': [{'time': '17:00', 'value': 10},
                                              {'time': '17:10', 'value': 12}, 
                                              {'time': '17:20', 'value' :7},
                                             ]},
         'sensor2': {'units': 'x', 'values': [{'time': '17:00', 'value': 9},
                                              {'time': '17:20', 'value': 11},
                                             ]},
        }

# first step: dictionary keyed by time {time:t,{'sensorx':v,}}
dic = {}
for sensor in data:
    for sample in data[sensor]['values']:
        if not dic.get( sample['time']):
            dic[ sample['time']] = {} # create the record
        dic[ sample[ 'time']][sensor] = sample['value']

# second step: generate CSV
columns=['time', 'sensor1', 'sensor2']
import csv
f = open( 'zz.csv', 'w', newline='')
writer = csv.DictWriter( f, columns)
writer.writeheader()
for key in dic:
    writer.writerow( dict( [('time',key)] + list( dic[key].items())))

其结果将是:

代码语言:javascript
复制
    time,sensor1,sensor2
    17:00,10,9
    17:10,12,
    17:20,7,11
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74564045

复制
相关文章

相似问题

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