如何解决将列表项列表转换为dict
我有这样的列表清单
[[],['1.0','1.0 (proxy)','1.1','1.1 (proxy)','2.0','2.0 (proxy)','3.0','3.0 (proxy)'],['2.0','2.0 (proxy)']]
我想将列表列表转换为dict,以使float值成为键并将对应的字符串转换为其值,因此{'1.0': '1.0 (proxy)' ....}
当我尝试使用izip压缩时,它作为迭代器出现,但是在用dict包装时出现错误。
>>> for item in izip(li):
... print item
...
([],)
(['1.0',)
(['2.0','2.0 (proxy)'],)
>>> for item in izip(li):
... if item:
... print dict(item)
...
Traceback (most recent call last):
File "<stdin>",line 3,in <module>
ValueError: dictionary update sequence element #0 has length 0; 2 is required
解决方法
您可以为每个子列表创建一个迭代器,并一次遍历两个元素。这样,您就可以获取键值对,并且当迭代器用尽时,您将转到下一个子列表。这也会跳过空列表
def create_dicts(lst):
new_list = []
for item in lst:
# create new dict
d = {}
# iterator over the sub list
x = iter(item)
while True:
try:
# check if anything is left in the iterator
key,value = next(x),next(x)
except StopIteration:
# if not,leave the while loop
break
# set the key and value in the dictionary
d[key] = value
# if the dictionary has any elements
if d:
new_list.append(d)
else:
continue
return new_list
li = [[],['1.0','1.0 (proxy)','1.1','1.1 (proxy)','2.0','2.0 (proxy)','3.0','3.0 (proxy)'],['2.0','2.0 (proxy)']]
a = create_dicts(li)
print(a)
[{'2.0': '2.0 (proxy)','1.0': '1.0 (proxy)','1.1': '1.1 (proxy)','3.0': '3.0 (proxy)'},{'2.0': '2.0 (proxy)',{'2.0': '2.0 (proxy)'}]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。