【问题标题】:insert data from two lists to dict with for loop [duplicate]使用for循环将两个列表中的数据插入到dict [重复]
【发布时间】:2018-12-12 00:30:55
【问题描述】:

我试过了:

numbers_dict = dict()
num_list = [1,2,3,4]
name_list = ["one","two","three","four"]
numbers_dict[name for name in name_list] = num for num in num_list

结果我得到了这个异常:

File "<stdin>", line 1
numbers_dict[name for name in name_list] = num for num in num_list

【问题讨论】:

  • 列表长度不同的情况需要处理吗?
  • @Two-Bit Alchemist no
  • 此处适用的另一个选项:{name: num for num, name in enumerate(name_list, 1)}

标签: python python-3.x for-loop


【解决方案1】:

您不需要显式循环。您可以使用 zip 加入您的两个列表,然后将其包装在 dict 中以获得您正在寻找的结果:

>>> dict(zip(num_list, name_list))

{1: 'one', 2: 'two', 3: 'three', 4: 'four'}

【讨论】:

    【解决方案2】:

    您需要使用 For 循环吗? 所以只是:

    for i in range(len(num_list)):
        numbers_dict[num_list[i] = name_list[i]]
    

    但您可以使用的最佳工具是zip

    numbers_dict = zip(num_list, name_list)

    【讨论】:

    • 在这种情况下,num_list 本身也可以表示为range(1, 5),从而简化了您的构造。
    • 我完全同意你的看法,但我只是在补充 OP 的回答。
    【解决方案3】:

    你也可以使用熊猫:

    numbers_series = pd.Series(name_list,index=num_list)

    熊猫系列很像字典,但如果你真的想要字典形式,你可以numbers_dict = dict(numbers_series)

    【讨论】:

    • 你可以使用热核装置来杀死蚊子。 :) 当 OP 要求 Pandas 解决方案时,Pandas 很好,或者如果他们有大量数据要处理,但当 OP 只想将一对小列表变成一个字典时,这就有点过分了。
    【解决方案4】:

    您正在尝试将列表推导、for 循环和多键访问混合到一个表达式中。不幸的是,这在 Python 中是不可能的。选择一种方法并坚持下去。

    这里有一些选项。它们都涉及zip,它从每个可按顺序迭代的参数中返回元素。

    for 循环

    d = {}
    for k, v in zip(name_list, num_list):
        d[k] = v
    

    字典理解

    d = {k: v for k, v in zip(name_list, num_list)
    

    dict 构造函数

    d = dict(zip(name_list, num_list))
    

    【讨论】:

      【解决方案5】:

      使用 zip - https://www.programiz.com/python-programming/methods/built-in/zip

      numbers_dict = dict()
      num_list = [1,2,3,4]
      name_list = ["one","two","three","four"]
      
      numbers_dict = dict(zip(name_list, num_list))
      

      然后print(numbers_dict) 给出{'one': 1, 'two': 2, 'three': 3, 'four': 4}

      【讨论】:

        【解决方案6】:

        dictlist 都有推导式。 dict 看起来像字面语法:

        {key: value for key, value in iterable}
        

        在您的情况下,zip 可能是正确的工具:

        >>> num_list = range(1, 5)
        >>> name_list = ['one', 'two', 'three', 'four']
        >>> zip(num_list, name_list)
        [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
        >>> dict(_)
        {1: 'one', 2: 'two', 3: 'three', 4: 'four'}
        

        【讨论】:

          猜你喜欢
          • 2014-03-21
          • 1970-01-01
          • 2014-09-17
          • 2018-04-06
          • 1970-01-01
          • 2013-05-28
          • 1970-01-01
          • 2014-03-03
          • 1970-01-01
          相关资源
          最近更新 更多