Python dict 自动将列表类型值转换为简单对象

Posted

技术标签:

【中文标题】Python dict 自动将列表类型值转换为简单对象【英文标题】:Python dict automatically converting list-type values to simple objects 【发布时间】:2019-04-03 04:06:30 【问题描述】:

我在使用 python 字典时遇到了一个奇怪的问题。

扩展 file 键值对: 正如您在上面清楚地看到的那样,在我的请求数据字典中,我有一个名为file 的对象,它是一个list(文件对象)。 当我尝试获取这个对象时,我得到了位于索引0 的实际文件对象。

甚至类型显示它是一个对象而不是一个列表。为什么会有这种行为?

type(request.data['file'])

django.core.files.uploadedfile.InMemoryUploadedFile

我尝试提取这个特定的键值对,但我仍然将值作为对象而不是列表来获取,这不是我想要的。

k:v for k,v in request.data.items() if k in ['file']
Out[16]: 'file': <InMemoryUploadedFile: irreg-total2.jpg (image/jpeg)>

谁能解释这种行为? 我正在使用 python 3

【问题讨论】:

请不要放 imgaes 而是 txt 数据,易于阅读和复制,你的数据集是什么像 CSV/json/xlx? 它是一个json对象。 这两个主要图像只是在调试模式下拍摄的实时请求的快照,如果尝试将其放在文本中不会有什么不同。很遗憾人们在不理解问题的情况下投反对票。 @saran3h 发布图片链接和发布答案中包含的文本之间存在巨大差异,即在第一种情况下,如果图像不再在线问题不再有意义,而文字仍将是帖子的一部分(显然)。此外,图像中的文本无法被搜索引擎索引。请记住,SO 不是论坛而是技术知识库,这里的重点是遇到相同问题的人可以找到问题和答案。此外,文本更具可读性。 这些图片中究竟存在哪些需要搜索引擎索引的内容?您不了解这些图片的上下文以及为什么我故意不发布实际文字。因为它根本没有任何区别,而且在这里有图像是相当合适的。 【参考方案1】:

data['file'] 不在列表中。它是InMemoryUploadedFile 的单个实例,如InMemoryUploadedFile 所示。

&lt;class 'list'&gt;: [&lt;InMemoryUploadedFile: ireg-totla2.jpg (image/jpeg)&gt;] 只是该对象的表示(从__repr__() 方法返回。

参见https://docs.djangoproject.com/en/2.1/_modules/django/core/files/uploadedfile/#InMemoryUploadedFile 上的UploadedFile.__repr__() 方法

将其与data dict 中的其余元素进行比较

【讨论】:

如果我有多个 &lt;InMemoryUploadedFile&gt; 对象作为值怎么办?然后它会将data['file']type 显示为list 吗?无论有多少对象,我都需要将data['file'] 作为&lt;InMemoryUploadedFile&gt; 的列表。寻找一个干净的解决方案来做到这一点。 这取决于data 字典的创建方式,尤其是data['file'] 值的设置方式。您没有显示任何执行此操作的代码,因此无法说明任何内容。

以上是关于Python dict 自动将列表类型值转换为简单对象的主要内容,如果未能解决你的问题,请参考以下文章

Python 自动将dict-list嵌套数据 转换成 带类型定义的对象

dict,list强制类型转换

数据类型3.5将列表和元组转换为字典

递增 dict 系统的列表(应该很简单)

python 中怎么把,list,字典dict转换为字符串

python 使用预定义模式将dict转换为对象的简单方法