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
所示。
<class 'list'>: [<InMemoryUploadedFile: ireg-totla2.jpg (image/jpeg)>]
只是该对象的表示(从__repr__()
方法返回。
参见https://docs.djangoproject.com/en/2.1/_modules/django/core/files/uploadedfile/#InMemoryUploadedFile 上的UploadedFile.__repr__()
方法
将其与data
dict 中的其余元素进行比较
【讨论】:
如果我有多个<InMemoryUploadedFile>
对象作为值怎么办?然后它会将data['file']
的type
显示为list
吗?无论有多少对象,我都需要将data['file']
作为<InMemoryUploadedFile>
的列表。寻找一个干净的解决方案来做到这一点。
这取决于data
字典的创建方式,尤其是data['file']
值的设置方式。您没有显示任何执行此操作的代码,因此无法说明任何内容。以上是关于Python dict 自动将列表类型值转换为简单对象的主要内容,如果未能解决你的问题,请参考以下文章