2015-07-09 5 views
2

Я новичок в написании скриптов на Python, но я знаю, что вы можете иметь список внутри словаря, но можете ли вы иметь словарь внутри списка?Python - Возможно ли иметь словарь в списке?

Мой пример: я пытаюсь выполнить скрипт в списке серверов linux. У меня сделать это с одним словарем как таковой (детали заблокированы по понятным причинам):

list1 = { 
'IP_' : '@IPADDR', 
'Username_' : '@USER', 
'Password_' : '@PASSWD', 
'dirlocation' : '@DIR' 
} 

, а затем ...

ssh.connect(list1['IP_'], port=22, username=list1['Username_'], password=list1['Password_']) 

, но это возможно, чтобы иметь что-то вроде:

ServerList = { 

list1 = { 
'IP_' : '@IPADDR', 
'Username_' : '@USER', 
'Password_' : '@PASSWD', 
'dirlocation' : '@DIR' 
} 

list2 = { 
'IP_' : '@IPADDR', 
'Username_' : '@USER', 
'Password_' : '@PASSWD', 
'dirlocation' : '@DIR' 
} 
} 

, а затем создать петлю как таковой?

for listobj in ServerList: 
    ssh.connect(ServerList.listobj['IP_'], port=22, username=listobj['Username_'], password=listobj['Password_']) 

Это, вероятно, то, что некоторые считают глупым вопросом, но большое спасибо за помощь!

+0

Да, попробуйте! Фактически, то, что у вас есть в 'ServerList', является типом dicts' {{..}, {..}} '. Список dicts - '[{..}, {..}]', что не является чем-то необычным. Обязательно поместите запятую между каждым dict, поскольку ваш пример в настоящее время отсутствует. – vk1011

ответ

2

Это возможно. Вы можете иметь Dict в Словаре:

>>> ServerDict = { 
... 
... 'list1': { 
... 'IP_' : '@IPADDR1', 
... 'Username_' : '@USER', 
... 'Password_' : '@PASSWD', 
... 'dirlocation' : '@DIR' 
... }, 
... 
... 'list2': { 
... 'IP_' : '@IPADDR2', 
... 'Username_' : '@USER', 
... 'Password_' : '@PASSWD', 
... 'dirlocation' : '@DIR' 
... } 
... } 

Или список:

>>> ServerList = [ 
... 
... { 
... 'IP_' : '@IPADDR1', 
... 'Username_' : '@USER', 
... 'Password_' : '@PASSWD', 
... 'dirlocation' : '@DIR' 
... }, 
... 
... { 
... 'IP_' : '@IPADDR2', 
... 'Username_' : '@USER', 
... 'Password_' : '@PASSWD', 
... 'dirlocation' : '@DIR' 
... } 
... ] 

И вы можете перебирать Словарь

>>> for k,v in ServerDict.items(): 
... print k, v['IP_'] 
... 
list1 @IPADDR1 
list2 @IPADDR2 
>>> for k in ServerDict.keys(): 
... print ServerDict[k]['IP_'] 
... 
@IPADDR1 
@IPADDR2 
>>> for v in ServerDict.values(): 
... print v['IP_'] 
... 
@IPADDR1 
@IPADDR2 

или список:

>>> for i in ServerList: 
... print i['IP_'] 
... 
@IPADDR1 
@IPADDR2 
2

Да, можно получить список элементов Dict:

>>> foo = [ {'a':1,'b':2} , {'c':3,'d':4} ] 
>>> foo[1] 
{'c': 3, 'd': 4} 
>>> 
Смежные вопросы