Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python嵌套列表和dicts,访问和设置问题_Python_List_Data Structures_Dictionary - Fatal编程技术网

python嵌套列表和dicts,访问和设置问题

python嵌套列表和dicts,访问和设置问题,python,list,data-structures,dictionary,Python,List,Data Structures,Dictionary,我最初是个c语言的人,但最近我开始用python做一些事情。 给我带来麻烦的是python中更高级的数据结构 我可以像在c中那样使用多个列表来完成这一切,但那会很无聊,对吗 无论如何,这里我有一个数据结构,它基本上是一个dict列表,其中dict的值字段是另一个包含2个键值对的列表: clients = [ {'client1':[{'test':'testvalue','status':'statusvalue'}]}, {'client2':[{'test':'testval

我最初是个c语言的人,但最近我开始用python做一些事情。 给我带来麻烦的是python中更高级的数据结构

我可以像在c中那样使用多个列表来完成这一切,但那会很无聊,对吗

无论如何,这里我有一个数据结构,它基本上是一个dict列表,其中dict的值字段是另一个包含2个键值对的列表:

clients = [
    {'client1':[{'test':'testvalue','status':'statusvalue'}]},
    {'client2':[{'test':'testvalue','status':'statusvalue'}]},
    {'client3':[{'test':'testvalue','status':'statusvalue'}]}
]
现在我希望能够访问testvalue和statusvalue字段并修改或读取它们。基于列表中的位置

在伪代码中,它类似于:

for i in range(0,clients):
    getvalue(clients[i].'test')
    setvalue(clients[i].'test')

    getvalue(clients[i].'status')
    setvalue(clients[i].'status')

最后,我想使用这个数据结构来呈现一个带有jinja2的html页面。首先,在Python中,您几乎不应该迭代任何东西。你迭代了一些东西

其次,您的数据结构是错误的。没有必要有一个dict列表,每个dict包含一个键/值对,每个值包含一个带有单个项的列表。您应该有一个dict的dict:您仍然可以对它进行迭代

clients = {
    'client1':{'test':'testvalue','status':'statusvalue'},
    'client2':{'test':'testvalue','status':'statusvalue'},
    'client3':{'test':'testvalue','status':'statusvalue'},
}

for key, value in clients.iteritems():
    print value['test']
    value['test'] = 'newvalue'

首先,在Python中,您几乎不应该迭代任何内容。你迭代了一些东西

其次,您的数据结构是错误的。没有必要有一个dict列表,每个dict包含一个键/值对,每个值包含一个带有单个项的列表。您应该有一个dict的dict:您仍然可以对它进行迭代

clients = {
    'client1':{'test':'testvalue','status':'statusvalue'},
    'client2':{'test':'testvalue','status':'statusvalue'},
    'client3':{'test':'testvalue','status':'statusvalue'},
}

for key, value in clients.iteritems():
    print value['test']
    value['test'] = 'newvalue'

我注意到您在列表中放了一个字典作为每个客户机的值

我认为您可能希望重新配置数据结构,如下所示:

clients = [
    {'client1':{'test':'testvalue','status':'statusvalue'}}
    {'client2':{'test':'testvalue','status':'statusvalue'}}
    {'client3':{'test':'testvalue','status':'statusvalue'}}
]
因此,您可以这样开始迭代:

for client in clients:
    for k, v in client.iteritems(): #this unpacks client into 'client' (k) and {'val'...} (v)
        print v['test'] #this gets the value of test.
        v['test'] = 'some_new_value' #this sets the value of test.

我注意到您在列表中放了一个字典作为每个客户机的值

我认为您可能希望重新配置数据结构,如下所示:

clients = [
    {'client1':{'test':'testvalue','status':'statusvalue'}}
    {'client2':{'test':'testvalue','status':'statusvalue'}}
    {'client3':{'test':'testvalue','status':'statusvalue'}}
]
因此,您可以这样开始迭代:

for client in clients:
    for k, v in client.iteritems(): #this unpacks client into 'client' (k) and {'val'...} (v)
        print v['test'] #this gets the value of test.
        v['test'] = 'some_new_value' #this sets the value of test.


为什么这里有列表?客户端不是有效的Python。什么是客户端无效?我使用一个列表是因为我希望能够迭代其中的一个,你也可以迭代一个dict。我可能认为客户机应该是一个列表,这取决于它的使用方式以及元素顺序是否重要,但内部数据结构看起来应该是dict而不是1元素列表。此外,客户端元素之间缺少一组逗号。您忘记了客户端中的逗号:-为什么这里有列表?客户端不是有效的Python。客户端无效是什么意思?我使用一个列表是因为我希望能够迭代其中的一个,你也可以迭代一个dict。我可能认为客户机应该是一个列表,这取决于它的使用方式以及元素顺序是否重要,但内部数据结构看起来应该是dict而不是1元素列表。此外,您在客户端元素之间缺少一组逗号。您忘记了客户端中的逗号:-但是这样,列表就不再排序了?我的意思是,client1不会是第一个一直打印出来的。如果你想让字典中的键保持有序,你需要从集合中获得有序的信息。但是,与只使用dicts和我使用列表并结合使用dicts相比,有什么优势呢?@prgmjunkie:如果条目的位置是你想要访问它的东西,与其使用client1名称,不如使用'client1'作为值而不是键:clients=[{'name':'client1','test':'testvalue','status':'statusvalue'},{'name':'client2',…谢谢你,我最终完全按照你说的做了。让一切都统一起来。但是这样,列表就不再有序了?我的意思是client1不会是第一个一直打印出来的。如果你想让字典的键保持有序,你需要从集合中获得有序的信息。但是与usi相比,它的优势是什么ng only dicts and me使用列表和dicts的组合?@prgmjunkie:如果条目的位置是您要用来访问它的东西,而不是client1名称,那么最好让'client1'是一个值而不是一个键:clients=[{'name':'client1','test':'testvalue','status':'statusvalue'},{'name':'client2',…谢谢你,我最终完全按照你说的做了。让一切都统一起来。你是对的。因为列表是有序的。我总是希望第一次迭代得到我定义的第一个,第二次迭代得到第二个,等等。这是因为我想用jinja2呈现一个html表单,我想第一个项目显示出来斯塔,好的,让我重新配置我自己的答案。是的,你是正确的。因为列表是有序的。我总是希望第一次迭代得到我定义的第一个,第二次是第二个,等等。这是因为我想用jinja2呈现一个html表单,我想首先显示第一项啊,好的,让我重新配置我自己的答案。