我目前通过基于列表的元素为字典分配了许多元素。
如:
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
谢谢,
答案 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))