2013-05-20 107 views
2

我目前通過基於列表的元素將許多元素分配給字典。將元素/鍵分配給詞典

如:

z = mylist 
query_dict = {"HOSTNAME":z[0],"TTL":z[1],"CLASS":z[2],"TYPE":z[3],"DETAILS":z[4]} 

但是我不知道是否有一個稍微更優雅的方式來這一點,比如你可以從列表中指定變量的方法:

a,b,c,d,e = z 

謝謝,

回答

2

您可以在這裏使用zip

>>> keys = ['HOSTNAME','TTL', 'CLASS', 'TYPE', 'DETAILS'] 
>>> z = range(5) 
>>> dict(zip(keys,z)) 
{'CLASS': 2, 'TYPE': 3, 'DETAILS': 4, 'TTL': 1, 'HOSTNAME': 0} 

這裏zip返回一個包含對同一指數的元素元組的列表:

>>> zip(keys,z) 
[('HOSTNAME', 0), ('TTL', 1), ('CLASS', 2), ('TYPE', 3), ('DETAILS', 4)] 

dict()可以在此列表轉換成dict

>>> print dict.__doc__ 
dict(iterable) -> new dictionary initialized as if via: 
    d = {} 
    for k, v in iterable: 
     d[k] = v 
3
>>> terms = ["HOSTNAME","TTL","CLASS","TYPE","DETAILS"] 
>>> z = [1,2,3,4,5] 
>>> dict(zip(terms,z)) 
{'HOSTNAME': 1, 'TYPE': 4, 'CLASS': 3, 'DETAILS': 5, 'TTL': 2} 

運作方式:

dict類有一個初始化方法,它採用一個可迭代:

| dict(iterable) -> new dictionary initialized as if via: 
|  d = {} 
|  for k, v in iterable: 
|   d[k] = v 

iterable包含在形式(key,value) /產量鍵值對。使用zip我們可以生成這些對:

>>> zip(terms,z) 
[('HOSTNAME', 1), ('TTL', 2), ('CLASS', 3), ('TYPE', 4), ('DETAILS', 5)] 

因此,我們在這個迭代飼料,導致我們所期望的字典中的構造函數。

1

如果我深知你的問題,你可以做例子:

fields = ["HOSTNAME", "TTL", "CLASS", "TYPE", "DETAILS"] 
query_dict = dict(zip(fields, z))