将元素/键分配给字典

时间:2013-05-20 05:53:30

标签: python

我目前通过基于列表的元素为字典分配了许多元素。

如:

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

谢谢,

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:1)

如果我理解你的问题,你可以这样做:

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