【问题标题】:How to put pickle dict value into an object如何将泡菜字典值放入对象中
【发布时间】:2016-08-24 05:13:58
【问题描述】:

我正在使用 pickle 将字典对象转储到 txt 文件中。我需要从文件中获取字典并仅提取某些值并将它们作为字符串放入对象中。

我的字典看起来像这样:

obj_dict = { 'name': 'MYID', 'value': 'usdf23444', 
             'name': 'MYID2', 'value' : 'asdfh3479' }

我遇到的部分难题是字典中有两个'name' 和两个'value',我需要分别抓取。

这是我正在使用的代码:

import pickle

filepath = file.txt
output = open(filepath, 'rb')
obj_dict = pickle.load(output)
for i in obj_dict:
    NewString = "VALUE1=" + i['value1'] + "VALUE2=" + i['value2']

print(NewString)

我知道这段代码不起作用,我更多地展示了我需要最终结果的样子,但基本上我需要将每个值放入一个我以后可以使用的字符串中。如何正确引用'value1''value2'?当我试图获得一个“价值”时,我也遇到了这个错误: TypeError: list indices must be integers or slices, not str

编辑评论 2

我不确定这是不是真的,我可以运行这段代码:

output = open(filepath, 'rb')
obj_dict = pickle.load(output)
for i in obj_dict:
    print(i['value'])

我的输出是:

usdf23444
asdfh3479

【问题讨论】:

  • 字典中不能有多个同名键。当您创建 dict(预酸洗)时,将其打印到屏幕上并查看您实际上没有两个值,第二个将覆盖第一个。
  • @bananafish 见上面的编辑^问题是我没有创建字典:/就是这样。
  • 不可能,dict不能有两个不同的对象有同一个key
  • 二进制有关系吗?这是来自 html 请求的响应。应该是这样的:'MYID' : 'usdf23444' ; 'asdfh3479' 但在dict 中,它显示为具有相同键的两个值
  • @SenorPenguin 好吧,我可以向您保证,该字典没有多个同名键。从您的消息来看,它看起来更像是一个列表列表?如果您打印原始数据结构(目前称为“obj_dict”),您会得到什么?什么是类型(obj_dict)?

标签: python dictionary pickle


【解决方案1】:

更新后,它看起来像是一个dicts列表。试试:

strings = ["VALUE{}={}".format(i, d['value']) for i, d in enumerate(obj_dict)]

【讨论】:

  • 如果我print(strings) 我得到:['VALUE0=usdf23444', 'VALUE1=asdfh3479'] 我现在可以单独引用这些吗?
  • @SenorPenguin 可以,使用字符串[0] 和字符串[1]。但是,如果您想查找它们,您可能也想自己使用 dict。也许您想创建一个以名称为键的字典?试试这个(未经测试):{r['name']: r['value'] for r in obj_dict}.
  • 只是想说声谢谢,因为这最终奏效了。不过,另一个问题是,当我打印每一个时,我得到VALUE0=usdf23444 无论如何我可以做到这样"VALUE0=" 不存在吗?我可能只是要使用修剪功能,但不知道是否有办法可以将代码更改为仅具有该值。或者也许我可以让它只说"VALUE=" 而没有 0 或 1?再次感谢!
  • nvm 我把它剪掉了,现在完美了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多