【问题标题】:How to Create Nested Dictionary in Python with 3 lists如何在 Python 中使用 3 个列表创建嵌套字典
【发布时间】:2017-12-22 16:39:33
【问题描述】:

让我们假设,我创建了 3 个列表,我想为它创建一个字典。例如

a= ['A', 'B', 'C', 'D']
b =[1, 2, 3, 4]
c = [9, 8, 7, 6]

现在我想要的是创建一个这样的字典:

{'A':{'1' :'9'} , 'B':{'2':'8'}, 'C':{'3':'7'} , 'D':{'4':'6'}}

有没有可能,有人可以帮我解决这个问题吗?

【问题讨论】:

标签: python dictionary


【解决方案1】:

您可以从 zip-ed 列表创建字典并将 int 值转换为字符串 - 如果我正确理解您的问题

dct = {x: {str(y): str(z)} for x, y, z in zip(a,b,c)}

输出:

{'A': {'1': '9'}, 'C': {'3': '7'}, 'B': {'2': '8'}, 'D': {'4': '6'}}

【讨论】:

    【解决方案2】:

    您也可以在这里使用map()

    a = ['A', 'B', 'C', 'D']
    b = [1, 2, 3, 4]
    c = [9, 8, 7, 6]
    
    dct = dict(map(lambda x, y, z : (x, {str(y): str(z)}), a, b, c))
    
    print(dct)
    

    哪些输出:

    {'A': {'1': '9'}, 'B': {'2': '8'}, 'C': {'3': '7'}, 'D': {'4': '6'}}
    

    【讨论】:

    • dict(map(lambda)) 很丑。使用 dict 理解而不是 atru's answer
    • @wjandrea。当时我不知道更好,并且对功能范式很着迷;)
    • 哦,当然。对不起,如果这听起来很明智。我自己也写过类似的代码:)
    【解决方案3】:

    你在寻找这样的东西吗?

    a= ['A', 'B', 'C', 'D']
    b =[1, 2, 3, 4]
    c = [9, 8, 7, 6]
    
    new_dict={}
    set(map(lambda x,y,z:(new_dict.__setitem__(x,{y,z})),a,b,c))
    print(new_dict)
    

    输出:

    {'D': {4, 6}, 'A': {9, 1}, 'B': {8, 2}, 'C': {3, 7}}
    

    【讨论】:

    【解决方案4】:
    { a[x]: {b[x]: c[x]} for x in range(len(a))}
    

    或者如果你是认真的:

    { a[x]: {str(b[x]): str(c[x])} for x in range(len(a))}
    

    【讨论】:

      【解决方案5】:

      你可以试试这个:

      a= ['A', 'B', 'C', 'D']
      b =[1, 2, 3, 4]
      c = [9, 8, 7, 6]
      new_data = dict([[a, dict([map(str, i)])] for a, i in zip(a, zip(b, c))])
      

      输出:

      {'A': {'1': '9'}, 'C': {'3': '7'}, 'B': {'2': '8'}, 'D': {'4': '6'}}
      

      或者

      new_data = dict(zip(a, map(lambda x:dict([x]), zip(map(str, b), map(str, c)))))
      

      【讨论】:

      • 在第一个sn-p中,不需要外层列表。 dict 可以采用生成器表达式:dict([a, dict([map(str, i)])] for a, i in zip(a, zip(b, c)))
      【解决方案6】:
      a = ['A', 'B', 'C', 'D'] # don't forget the quotation marks
      b = [1, 2, 3, 4]
      c = [9, 8, 7, 6]
      
      res = dict()
      for i, index_a in enumerate(a):
          res[index_a] = {str(b[i]): c[i]}
      

      编辑:或者使用列表理解(主要针对这里的选民,因为它是高级 python 并且更难理解):

      res = dict((a[i], {str(b[i]): c[i]}) for i in range(len(a)))
      

      【讨论】:

      • 这是一个生成器表达式,而不是列表推导式。但是您可以将其转换为 dict 理解以使其更清晰:{a[i]: {str(b[i]): c[i]} for i in range(len(a))}.
      【解决方案7】:

      假设你想要的是a 是外部字典中的键,bc 是内部字典的键和值元素:

      d = {k: {x: y} for k, x, y in zip(a, b, c)}
      

      更新: 但是,在您的示例中,xy 是字符串,所以如果这是您想要的:

      d = {k: {str(x): str(y)} for k, x, y in zip(a, b, c)}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多