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

时间:2014-05-05 12:18:56

标签: python list data-structures dictionary

我原来是个人,但最近我开始在python中做一些事情。 给我带来麻烦的是python中更先进的数据结构。

我可以使用c中的多个列表来完成所有操作,但那会很无聊吗?

无论如何这里我有一个数据结构,它基本上是一个dicts列表,其中dict的value字段是另一个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页面

2 个答案:

答案 0 :(得分:5)

首先,在Python中你应该(几乎)永远不会迭代range(len(something))。你迭代something

其次,您的数据结构是错误的。没有一个dicts列表是没有意义的,每个dict包含一个键/值对,每个值包含一个带有单个项的列表。你应该只有一个dicts的词典:你仍然可以迭代它。

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'

答案 1 :(得分:2)

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

我认为您可能希望重新配置您的数据结构:

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.