两个来自文本文件的字典,其中值是列和键行计数



我的文件有这个模式(这是一个例子)。我想创建两个字典,每列作为值,键作为整数。

John  Moor
Age   22
id    112
grade 60
Amy  Ling
Age  22
id   114
grade 67

字典应该是这样的:

dict1 = {1 : ["John", "Age", "id", "grade"], 2 : ["Amy", "Age", "id", "grade"]}
dict2 = {1 : ["Moor", 22, 112, 60], 2 : ["Ling", 22, 114, 67]}

我做了一些挖掘,但给出的大多数解决方案是-第一列作为关键和第二列作为值。这是我能想到的,试图通过readlines().split()[0]拆分列,但没有工作。

f = open(fname)
d = {}
for line in f:
name, info = line.split() 
d[name] = info
print(d)

任何建议吗?任何帮助吗?我该怎么做呢?:)

您可以使用defaultdict存储数据和条带split**函数来操作您读取的行。

file.txt

John  Moor
Age   22
id    112
grade 60
Amy  Ling
Age  22
id   114
grade 67

代码如下:

from collections import defaultdict
dict1 = defaultdict(list)
dict2 = defaultdict(list)
with open("file.txt") as file:
idx = 1
for line in file.readlines():
stripped_line = line.strip()
if stripped_line:
items = stripped_line.split(" ")
dict1[idx].append(items[0])
try:
dict2[idx].append(int(items[-1]))
except:
dict2[idx].append(items[-1])
else:
idx += 1
print(f"dict1: {dict(dict1)}")
print(f"dict2: {dict(dict2)}")

输出:

dict1: {1: ['John', 'Age', 'id', 'grade'], 2: ['Amy', 'Age', 'id', 'grade']}
dict2: {1: ['Moor', 22, 112, 60], 2: ['Ling', 22, 114, 67]}

更新如果你能像这样存储数据会更有意义:

from collections import defaultdict
dict1 = defaultdict(list)
with open("file.txt") as file:
is_first_line = True
key = None
for line in file.readlines():
stripped_line = line.strip()
if stripped_line:
items = stripped_line.split(" ")
if is_first_line:
key = items[0] + ' ' + items[-1]
else:
try:
dict1[key].append({items[0]: int(items[-1])})
except:
dict1[key].append({items[0]: items[-1]})
is_first_line = False
else:
is_first_line = True
print(f"dict1: {dict(dict1)}")

输出:

dict1: {'John Moor': [{'Age': 22}, {'id': 112}, {'grade': 60}], 'Amy Ling': [{'Age': 22}, {'id': 114}, {'grade': 67}]}

最新更新