为了账号安全,请及时绑定邮箱和手机立即绑定

在 python 中使用 .txt 文件创建字典

在 python 中使用 .txt 文件创建字典

当年话下 2023-07-11 16:27:36
我有一个配对列表,就像pair_users = [('a','b'), ('a','c'), ('e','d'), ('e','f')]我保存此列表时使用的代码一样:with open('pair_users.txt', 'w') as f:  f.write(','.join('%s' % (x,) for x in pair_users))然后,当我想在另一个笔记本中使用它来创建一个如下所示的字典时{'a': ['b', 'c'], 'b': [], 'c': [], 'd': [], 'e': ['d', 'f'], 'f': []}为了创建该字典,我使用以下代码:graph = {}for k, v in pair_users:    graph.setdefault(v, [])    graph.setdefault(k, []).append(v)graph但我的问题是,当我打开保存的文件后运行图形代码时,pair_users = open('/content/pair_users.txt', 'r')得到的结果是一个空字典{}。这是我打开文件时的输出当我使用代码创建图表而不将列表保存为 txt 文件时,我得到了正确的答案,我的问题是当我保存它然后打开它时。例如,它在这里工作:
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

除了按照pickle其他答案中的建议使用或解析字符串之外,您还可以使用一些“更通用的格式”,例如 JSON:


import json


pair_users = [('a','b'), ('a','c'), ('e','d'), ('e','f')]

with open('pair_users.txt', 'w') as f:

    json.dump(pair_users,f)


with open("pair_users.txt") as f:

    pair_users = json.load(f)


graph = {}

for k, v in pair_users:

    graph.setdefault(v, [])

    graph.setdefault(k, []).append(v)

print(graph)


查看完整回答
反对 回复 2023-07-11
?
大话西游666

TA贡献1817条经验 获得超14个赞

读取文件时得到的结果只是一个字符串。您不能将字符串迭代为k,v。您可以通过自己的解析将字符串解析为元组,也可以使用类似pickle.

用泡菜是:

import pickle

with open('pair_users.pkl', 'wb') as f:

    pickle.dump(pair_users, f)

    f.close()


with open('pair_users.pkl', 'rb') as f:

    pair_tuple = pickle.load(f)

    f.close()

    print(pair_tuple)


查看完整回答
反对 回复 2023-07-11
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

  • 问题是,读回时pair_users是一种类型。str

  • 用于ast.literal_eval将 转换stringtuple.

from ast import literal_eval


pair_users = open('test.txt', 'r')


pair_users= literal_eval(pair_users.read())


graph = {}

for k, v in pair_users:

    graph.setdefault(v, [])

    graph.setdefault(k, []).append(v)


graph

[out]: 

{'b': [], 'a': ['b', 'c'], 'c': [], 'd': [], 'e': ['d', 'f'], 'f': []}


查看完整回答
反对 回复 2023-07-11
  • 3 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信