python - 将文本文件打印为字典 python
问题描述
我正在处理的文本文件
3:d:10:i:30
1:d:10:i:15
4:r:30
1:r:15
2:d:12:r:8
4:l:20
5:i:15
3:l:20:r:22
4:d:30
5:l:15:r:15
我正在尝试从一个文本文件中打印一个字典,它应该看起来像:
{1: {'d': 10, 'i': 15, 'r': 15},
2: {'d': 12, 'r': 8},
3: {'d': 10, 'i': 30, 'l': 20, 'r': 22},
4: {'d': 30, 'l': 20, 'r': 30},
5: { 'i': 15, 'l': 15, 'r': 15}}
相反,我的代码覆盖了文件中的每一行,并且只将最近的行作为字典中的值,所以它看起来像:
{'3': {'l': '20', 'r': '22'},
'1': {'r': '15'},
'4': {'d': '30'},
'2': {'d': '12', 'r': '8'},
'5': {'l': '15', 'r': '15'}})
这是我到目前为止所拥有的
def read_db(file):
d = defaultdict(dict)
for line in open('db1.txt'):
z = line.rstrip().split(':')
d[z[0]]=dict( zip(z[1::2],z[2::2]))
print(d)
我尝试做 += 但该操作数不适用于字典。我有点卡住了。谢谢你的帮助
解决方案
这是一种使用简单迭代和dict.setdefault
.
前任:
res = {}
with open(filename) as infile: #Open file to read
for line in infile: #Iterate Each line
line = line.strip().split(":") #Split by colon
res.setdefault(line.pop(0), {}).update(dict(zip(line[::2], line[1::2])))
print(res)
输出:
{'1': {'d': '10', 'i': '15', 'r': '15'},
'2': {'d': '12', 'r': '8'},
'3': {'d': '10', 'i': '30', 'l': '20', 'r': '22'},
'4': {'d': '30', 'l': '20', 'r': '30'},
'5': {'i': '15', 'l': '15', 'r': '15'}}
或使用collections.defaultdict
前任:
from collections import defaultdict
res = defaultdict(dict)
with open(filename) as infile:
for line in infile:
line = line.strip().split(":")
res[line.pop(0)].update(dict(zip(line[::2], line[1::2])))
print(res)
输出:
defaultdict(<class 'dict'>,
{'1': {'d': '10', 'i': '15', 'r': '15'},
'2': {'d': '12', 'r': '8'},
'3': {'d': '10', 'i': '30', 'l': '20', 'r': '22'},
'4': {'d': '30', 'l': '20', 'r': '30'},
'5': {'i': '15', 'l': '15', 'r': '15'}})
推荐阅读
- jmeter - 为什么使用 3rd 方 COAP 插件时 JMeter 总是显示 0 毫秒的延迟?
- python - 雅虎天气 API 2019 - 类型错误/属性错误
- c# - How to get yearWeek in python like we get using DateTimeFormatInfo.InvariantInfo.Calendar.GetWeekOfYear() in C#?
- javascript - How to change background color of selected date in FullCalendar
- r - 如何将从其他excel表中提取的数据合并到r中的一个最终excel表中?
- python - twoSum 找出所有可能的独特情侣
- php - 数字从 n 减一到 0 PHP
- javascript - 自定义复选框不切换
- haskell - 在haskell中执行序列奇怪的“案例”
- c# - 从文本文件到二维数组