Python数据结构

Python数据结构,python,Python,我必须将一些复杂的数据写入一个文件,以便以后可以轻松地进行编辑。 我有一个图像列表,每个图像都有一个对象列表,每个对象都有坐标 这是我当前的数据格式,一个列表: [[[x_coord, y_coord], [widh, height], rotation],["object_name", accuracy]], [[...]] ....] 我想要的是将所有这些附加到一个图像名称上。因此,当我想要迭代每个图像时,我希望能够读取每个图像的所有上述数据 为了更好地理解这个问题,我有一个系统,它接收

我必须将一些复杂的数据写入一个文件,以便以后可以轻松地进行编辑。 我有一个图像列表,每个图像都有一个对象列表,每个对象都有坐标

这是我当前的数据格式,一个列表:

[[[x_coord, y_coord], [widh, height], rotation],["object_name", accuracy]], 
[[...]] ....]
我想要的是将所有这些附加到一个图像名称上。因此,当我想要迭代每个图像时,我希望能够读取每个图像的所有上述数据

为了更好地理解这个问题,我有一个系统,它接收一个图像作为输入,并输出一个与上面一样的列表。我没有可变名称,而是有值。现在,我想在我的系统中运行多个映像,但我不知道如何存储输出,以便知道输出对应于哪个映像,因为我想共享结果。 这是我的系统从图像输出的示例

[711.292325468624509.893122669361],[152.17577602646008,18.7568439234343363],[0.8387087394488912],“H”,0.9245172388413373,0],[707.8748537512387415.88163813422705],[142.3154146012468,18.638623686112567],[0.9886537282165556],“负”,0.990477591839958,0],[272.876551735],[186.6175797860084,19.211811300659143],0.22486986712600301],“质粒”,0.941743278503418,0],[124.15456456258250.43897797079646],[29.55055251880815.06842795688405],-9.258418081903768],“11”,0.997819478236755371,0],[[94.683737261438282528,251.459638202163],[35.19040785656383838636],“24956],”,0.9792481660842896,0],[521.6560694750618654.7176179324879],[101.80468126671622,18.683637160515204],[0.3779982099082056],[0.97034614566476,0],[650.0936701718499,512.4483476526597],[28.2753888409974,16.91495785856379],[0.71513042265],“2889”,0.994759216289419],[216278949],[216289412],[63.57085096105481,15.692085586024415],[2.5319410047875994],“空单元格”,0.9971669316291809,0],[280.7394181980806203.18943001242243],[38.38290734128221,35.2284749215178],[0.6360230675017051],“L”,0.9367004632949829,0],[681.4627260327,508.57304371104516],[62.7681515151515],“测试”,[681.4680738073809],“测试”[727.4159714754891415.9454027063706],[66.49714216688848,15.303173897880407],-0.8295930881855053],[0.9496070688421075,0],[0

有没有一种方法可以创建一个图像列表,并且每个图像都有一个类似于上面的列表

或者,如果list of list不是正确的存储方式,那么什么是正确的存储方式


我通常用C编写代码,列表和字典的概念对我来说是非常新的,我不太了解它们是如何完全工作的,因此我不知道什么时候使用它们。

字典是理想的,因为它可以很容易地被引用并存储为json文件。如果我在做这个项目,我会创建一个字典,其中没有第一级键是图像文件的名称。您可能使用的示例字典如下:

data = {'images/example_image1.png':{'x':0, 'y':0, 'w':50, 'h':75, 'r': 0}, 
'images/example_image2.png':{'x':0, 'y':0, 'w':50, 'h':75, 'r': 0}, 
'images/example_image3.png':{'x':0, 'y':0, 'w':50, 'h':75, 'r': 0}}
如果您的图像列表是一个txt文件,则可以通过如下方式实现:

data = {}
with open('image_list.txt','r') as file:
    # split the image names into a list
    images = file.read().splitlines()
    for img in images:
        # open and gather the values from the image as a dictionary
        values = {}
        # set all the attributes of the values dictionary for this image
        data[img] = values
现在,您可以使用带有for循环的字典来打开每个图像,并且字典中已经包含了所有需要的信息

for key, value in data.items():
    with open(key) as img:
        # perform operations using the value dictionary
编辑完数据字典后,可以使用以下方法保存:

import json
with open('data.json', 'w') as file:
    json.dump(data, file)

我建议使用
集合。namedtuple

import collections

Image = collections.namedtuple('Image',['size', 'values', 'cooridinates']) #for example
my_image = Image([20, 200], [300,24], [209, 300]) #mock values
那么输出将是:

In []: my_image
Out[]: Image(size=[20, 200], values=[300, 24], cooridinates=[209, 300])

如果可以对图像使用类:

class img(object):
    __init__(coords=[0, 0], size=[0, 0], etc.):
        self.coords=coords
        self.size=size
        ...

image1=img(coords=[100, 2], size=[50, 100])
然后,要检索值,请执行以下操作:

img1_coords=image1.coords

你能详细说明一下a)你当前的数据格式,b)你想要的数据格式,还有可能c)为什么需要转换。你可以用元组列表,数据框,图片目录到元组列表…很难说哪一个是最好的。我会很快更新帖子。嗯,这是必要的,因为我有对象,如果我没有附加如果将它们转换为图像,我将无法知道对象存在的位置。您的图像是如何存储的?只需使用图像词典列出有关词典的列表即可?查找{'image1':[[…,…],…,[…],[…],,'image2':[…],…}我从一个文本文件中获取图像的名称。因此,基本上我只需要在每个图像上附加一个列表。我现在正在尝试,并让您知道它是有效的。也许我误解了,但我的键只是列表。我不应该也迭代列表吗?listofimg=[]对于键,检测中的值。items():with open('images.txt'))作为img:data={}/*我不清楚这个部分,因为我有一个list*/listofimg.append(data)其思想是,首先将数据转换为字典,然后可以对该字典执行操作。从文本文件转换为字典需要使用的文本文件的示例。我明白了,所以我应该首先转换此列表:[[x_coord,y_coord],[widh,height],rotation],“object_name”,准确度]],[[…]]..先输入词典。