【问题标题】:Create dictionary from 2 lists从 2 个列表创建字典
【发布时间】:2014-04-12 21:39:39
【问题描述】:

我的任务:我有 2 个不同大小的列表(例如,1、2、3、4 和“qwe”、“asd”、“zxc”)。我如何在下一个条件下使用此列表创建字典:如果键数超过值 - dict[key]=None。如果值的计数更多 - 只是 inore 它。 我的代码:

list1=[1,2,3,4]
list2=["qwe","asd","zxc"]
dictx={}
for x in range(len(list1)):
if x>len(list2):
    dictx[list1[x]]=None
else:
    dictx[list1[x]]=list2[x]

但我发现错误:Traceback(最近一次调用最后一次): 文件“”,第 5 行,在 dictx[list1[x]]=list2[x] IndexError:列表索引超出范围 我在哪里做错了?Python 3.4 Upd.It 的工作,但我试图了解我在这段代码中的错误。有人想过吗?

【问题讨论】:

    标签: python python-3.x dictionary


    【解决方案1】:

    您也可以使用itertools.izip_longest,如下:

    import itertools
    list1=[1,2,3,4]
    list2=["qwe","asd","zxc"]
    print ({l1:l2 for l1,l2 in itertools.izip_longest(list1,list2,fillvalue=None)})
    

    编辑: 在python 3中:

    import itertools
    list1=[1,2,3,4]
    list2=["qwe","asd","zxc"]
    print ({l1:l2 for l1,l2 in itertools.zip_longest(list1,list2,fillvalue=None)})
    

    输出:

    {1: 'qwe', 2: 'asd', 3: 'zxc', 4: None}
    

    【讨论】:

    • @user3342929:此答案使用 Python 2:添加括号:print({l1:l2 .. stuff .. }),并将 izip 更改为 zip
    • @DSM : 感谢您的帮助...我在 python 2.7 中测试过...现在,我已经修改为在 python 3 中编译
    • AttributeError: 'module' object has no attribute 'izip_longest'...我做错了什么?)抱歉,没有看到有关更改。
    • @user3342929:正如我所说,你必须将 izip 更改为 zip -- izip_longest 在 Python 3 中重命名为 zip_longest。尝试 from itertools import zip_longest,然后尝试 dict(zip_longest(list1, list2))
    • 谢谢,现在可以了。但是为什么我不能使用我的算法呢?哪里出错了?
    【解决方案2】:

    使用itertools.chainitertools.repeat 在值列表中填充Nones,然后压缩列表:

    from itertools import chain, repeat
    
    d = dict(zip(list1, chain(list2, repeat(None))))
    

    repeat(None) 是一个无限迭代器,它永远产生None

    chain(list2, repeat(None)) 是一个迭代器,它从 list2 产生项目,然后在 list2 用完时产生 Nones。

    zip(...)list1 和填充的list2 返回对应元素对的列表。 zip 在任何输入用完时停止,因此输入与list1 一样长。

    最后,dict(...) 获取键值对列表,并使用与这些值对应的键创建一个 dict。

    【讨论】:

      猜你喜欢
      • 2022-10-18
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 2018-08-22
      • 1970-01-01
      • 2019-11-29
      相关资源
      最近更新 更多