【问题标题】:Dictionary Keys * values to a list in python [duplicate]字典键*值到python中的列表[重复]
【发布时间】:2021-01-05 09:47:42
【问题描述】:

我的字典如下:

the_dict = {'1': 2,
 '2': 4,
 '3': 3,
 '8': 3,
 '9': 3,
 '10': 4,
 '14': 4}

我需要将键乘以值来创建一个长的平面列表。 我的尝试如下,但它搞砸了 10 和 14:

new_target = []
for k, v in zip(the_dict.keys(), the_dict.values()):
    new_target += list(k*v)

此代码产生: ['1', '1', '2', '2', '2', '2', '3', '3', '3', '8', '8', '8', '9', '9', '9', '1', '0', '1', '0', '1', '0', '1', '0', '1', '4', '1', '4', '1', '4', '1', '4']

该代码接近,但由于 10 和 14 上的以下行为而无法正常工作; list("10" *2) 产生 ['1', '0', '1', '0'] 而不是所需的 ['10', '10']

如何创建所需的列表?

【问题讨论】:

    标签: python python-3.x list dictionary


    【解决方案1】:

    添加到 M-Chen-3 的答案,您还可以使用 list comprehension 将其压缩为类似这样的内容:

    new_target = [k for k, v in the_dict.items() for _ in range(v)]
    

    【讨论】:

      【解决方案2】:

      您需要对代码进行两项更改:

      1. 既然可以迭代 the_dict.items() 并获得相同的结果,为什么还要迭代 zip(the_dict.keys(), the_dict.values())

      2. 请注意,如果将字符串包含在列表中,则字符串的长度无关紧要:

      print(["10"]*2)
      # Prints ['10', '10']
      print(["1"]*2)
      # Prints ['1', '1']
      

      另外,正如 wim 所指出的,list 函数调用是不必要的,因为您已经在创建一个列表。

      话虽如此,以下是更正后的代码:

      the_dict = {'1': 2,
       '2': 4,
       '3': 3,
       '8': 3,
       '9': 3,
       '10': 4,
       '14': 4}
      
      
      new_target = []
      for k, v in the_dict.items():
          new_target += [k]*v
          
      print(new_target)
      # Prints ['14', '14', '14', '14', '10', '10', '10', '10', '2', '2', '2', '2', '1', '1', 
      # '3', '3', '3', '9', '9', '9', '8', '8', '8']
      

      查看 diggy 的答案以获得更短的列表理解版本!

      【讨论】:

        猜你喜欢
        • 2013-09-21
        • 2021-01-01
        • 2019-11-13
        • 2013-05-22
        • 2019-01-16
        • 2012-01-24
        • 2020-11-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多